Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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 ?

share|improve this question
up vote 15 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/ 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.

share|improve this answer
libfaketime is just perfect, thank you ! – nicoulaj May 4 '10 at 14:20

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

share|improve this answer
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. – nicoulaj May 4 '10 at 14:29

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
share|improve this answer
Clever trick, but it only modifies the timezone, so this way you are limited to [-12 hours,+11 hours] range. – nicoulaj May 4 '10 at 14:04

You can just use executable faketime (from ubuntu repositories sudo apt-get install faketime) by:

faketime -f "-15d" date

Or even fake time in whole shell by

faketime -f "-15d" bash -l
share|improve this answer
Kyle Brant posted pretty much this answer back in 2010. Please edit your answer to expand on it in some way that makes it substantially different from the existing answers. – Michael Kjörling Jan 9 '15 at 13:06
My solution is much easier than using library preload as Kyle Brant answered because location of libfaketime .so file is very specific and depends on linux distribution and package managers. – abonec Jan 9 '15 at 13:40

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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