up vote 3 down vote favorite
3
share [g+] share [fb]

I'm certainly trying to achieve something weird here, but I want to fake the date locally for a shell session on GNU/Linux. I need to black-box test how a program behaves at different dates, and modifying the system-wide date can have unwanted side effects (cron jobs, messed up logs, etc).

Any ideas ?

link|improve this question
feedback

3 Answers

up vote 6 down vote accepted

Haven't tried this one out yet. But if this is current is looks like someone already wrote the library you can preload with libfaketime.

The basic usage is:

user@host> LD_PRELOAD=/usr/local/lib/libfaketime.so.1 FAKETIME="-15d" date
Mon Nov  8 12:01:12 CEST 2007

You can use ltrace to make sure all the time functions your application uses are covered.

link|improve this answer
libfaketime is just perfect, thank you ! – Julien Nicoulaud May 4 '10 at 14:20
feedback

You might be able to preload a library that has an alternative time() implementation.

link|improve this answer
1  
Depending on how the program(s) access current time, you might have to preload alternative implementations of gettimeofday, clock_gettime, and/or possibly others as well, but yes, I've used this approach with success before. – Kjetil Joergensen May 4 '10 at 11:37
It's a Java program, and it seems to work well with libfaketime. – Julien Nicoulaud May 4 '10 at 14:29
feedback

You can set the TZ variable to an oddball value.

$ date
Tue May  4 06:24:43 CDT 2010
$ date -u
Tue May  4 11:24:47 UTC 2010
$ export TZ='CDT-3:12'
$ date
Tue May  4 14:36:53 CDT 2010
$ export TZ='CDT+5:37'
$ date
Tue May  4 05:48:00 CDT 2010
link|improve this answer
Clever trick, but it only modifies the timezone, so this way you are limited to [-12 hours,+11 hours] range. – Julien Nicoulaud May 4 '10 at 14:04
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.