datefudge - pretend the system time is different
Contents
Bugs
There is no attempt to make this change undetectable by the program. In particular, file modification
times are not modified. (Note that such a functionality might be provided by faketime(1) program
available in libfaketime Debian package.)
On systems using 32-bit representation of time, datefudge is affected by the year 2038 problem, which
might cause dates to be wrapped around, for instance:
$TZ=UTCdatefudge"2038-01-1903:14:07"sh-c"sleep1;date-R"
Fri Dec 13 20:45:53 UTC 1901Copyright
Copyright © 2003 by Matthias Urlichs.
Copyright © 2008-2024 by Robert Luberda.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You may
redistribute copies of datefudge under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
Date Format
The at_date argument can be given in any format accepted by the date(1) program, for example "2007-04-01
12:21" or "yesterday", or "next Friday".
Description
datefudge is a small utility that pretends that the system time is different by pre-loading a small
library which modifies the time(2), gettimeofday(2) and clock_gettime(2) system calls.
Examples
Basicexamples:$datefudge"2007-04-0110:23"date-R
Sun, 01 Apr 2007 10:23:00 +0200
$datefudge"1May2007"date-R
Tue, 01 May 2007 00:00:00 +0200
$datefudge"2weeksago"date-R
Wed, 16 Jan 2008 13:32:12 +0100
Non-staticvs.staticexample:$datefudge"2007-04-0110:23"sh-c"sleep3;date-R"
Sun, 01 Apr 2007 10:23:03 +0200
$datefudge--static"2007-04-0110:23"sh-c"sleep3;date-R"
Sun, 01 Apr 2007 10:23:00 +0200
Non-staticwithsub-secondsexample:$datefudge--static"2007-04-0110:23:45.123456"date+"%F%T%N"
2007-04-01 10:23:45 000000000PrependingLD_PRELOADexample:$datefudge--add-ld-preload/path/to/libclang_rt.asan-x86_64.so"2007-04-0110:23"command
If the command was compiled by 'clang -fsanitize=address -shared-libasan', then the above
command might display some errors, for example:
==7625==ERROR: AddressSanitizer: heap-use-after-free on address 0x614000000044 at pc ....
Without the --add-ld-preload argument, this would not work at all.
Name
datefudge - pretend the system time is different
Options
--static, -s
Mark the date as a `static' one. The above mentioned system calls will always return the date
given in the at_date argument, regardless of time passing. Please note that sub-seconds part of
the returned date is always set to 0. See EXAMPLES below.
--add-ld-preloadlib, -llib
Prepend lib to LD_PRELOAD environment variable before executing given program. This option might
be useful for example to inject sanitizer libraries (e.g. from Address Sanitizer) to the list of
preloaded libraries before the internal datefudge's library. See EXAMPLES below.
--help, -h
Print short usage information and exit.
--version, -v
Print version information and exit.
See Also
date(1), ld.so(1), time(2), gettimeofday(2), clock_gettime(2), faketime(1) datefudge 1.27 January 13th, 2024 DATEFUDGE(1)
Synopsis
datefudge [-s|--static] [-l|--add-ld-preloadlib] at_dateprogram [arguments ...]
