Kako promijeniti sistemsko vrijeme za neki program?

Ponekad bismo željeli pokrenuti neki program kojem rad ovisi o sistemskom vremenu računala na takav način kao da je pokrenut u nekom prošlom ili budućem vremenu, jer nas zanima rezultat obrade u to drugo vrijeme.

Primjer: korisnik je u nekom od popularnih tabličnih kalkulatora napravio proračunsku tablicu i u formulama koristio funkcije koja vraćaju trenutačni datum i/ili vrijeme (TODAY() i NOW()). Kasnije je shvatio da bi ponekad trebao rezultat proračuna ne samo za sadašnji trenutak, nego i za neki prošli ili budući. Umjesto da promijeni cijelu proračunsku tablicu tako da se vrijeme proračuna može zadati kao vrijednost neke ćelije, jednostavnije je rješenje pokrenuti tablični kalkulator s postojećom proračunskom tablicom, ali mu pri tome lažirati sistemsko vrijeme.

Na Linuxu za ovu namjenu može poslužiti program faketime (na Debianu i srodnim distribucijama instalira se kroz istoimeni paket) koji se oslanja na programsku biblioteku libfaketime.

Slijedi par primjera pozivanja programa faketime s različitim načinima određivanja vremenske oznake, iza koje se navodi putanja programa kojeg želimo pokrenuti te njegovi parametri (svi primjeri testirani su na trenutačnim verzijama Debiana i Ubuntua):

$ faketime now /bin/date
Tue Apr 12 09:50:20 CEST 2016
$ faketime 'now - 2 days' date
Sun Apr 10 09:50:20 CEST 2016
$ faketime 'now + 1 year 2 days' date
Fri Apr 14 09:50:20 CEST 2017
$ faketime '2 hours ago' date
Tue Apr 12 07:50:20 CEST 2016
$ faketime '1 year ago' date
Sun Apr 12 09:50:20 CEST 2015
$ faketime 'yesterday 15:00:00' date
Mon Apr 11 15:00:00 CEST 2016
$ faketime 'tomorrow 15:00:00' date
Wed Apr 13 15:00:00 CEST 2016
$ faketime 'Mar 27 00:00:00 CET 2016' date
Sun Mar 27 00:00:00 CET 2016
$ faketime '2016-03-27 01:59:59' bash -c 'date ; sleep 1 ; date'
Sun Mar 27 01:59:59 CET 2016
Sun Mar 27 03:00:00 CEST 2016
$ faketime '2016-03-27T00:00:00Z' date
Sun Mar 27 01:00:00 CET 2016
$ faketime 23:59:45 xclock -update 1
$ faketime '2015-12-31 12:00:00' libreoffice moja_tablica.xlsx 

faketime ima i opciju -f s kojom se vremenska oznaka zadaje na način kako to određuje biblioteka libfaketime. U narednim primjerima obratite pažnju na to da se format vremenske oznake razlikuje od gore navedenih primjera, te da se na početku apsolutne vremenske oznake mora staviti znak @ jer će inače sistemsko vrijeme biti zaustavljeno na zadanoj vrijednosti:

$ faketime -f '+0' date
Tue Apr 12 10:00:31 CEST 2016
$ faketime -f '-2d' date
Sun Apr 10 10:00:31 CEST 2016
$ faketime -f '+1y' date
Wed Apr 12 10:00:32 CEST 2017
$ faketime -f '@2016-03-27 01:59:45' xclock -update 1 -d
$ faketime -f '2015-12-31 23:59:45' xclock -update 1 -d

Opcija -f omogućava da se na kraju vremenske oznake zada množitelj kojim se ubrzava odnosno usporava protjecanje sistemskog vremena:

$ faketime -f "@`date --iso-8601=date` 06:00:00 x10" xclock -update 1
$ faketime -f '@2001-01-01 00:00:00 x1000' xclock -update 10 -d
$ faketime -f '+0 x0.1' tint

U zadnjem primjeru faketime pokreće program tint pri čemu mu usporava sistemsko vrijeme 10 puta (tint možda trebate instalirati kroz istoimeni paket).

Na sustavima MS Windows 2000 i novijima sličnu funkcionalnost nudi freeware RunAsDate. Kada se pokrene program RunAsDate.exe, otvara se grafičko sučelje u kojem se zadaju parametri za pokretanje izabranog programa pod lažiranim sistemskim vremenom.

RunAsDate.exe se također može koristiti i iz ljuske (npr. cmd.exe). Evo primjera pokretanja MS Excela:

RunAsDate /movetime 31\12\2015 12:00:00 "C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE" moja_tablica.xlsx

Treba uočiti da postoji i RunAsDate for x64, no to nije inačica za 64-bitne Windowse nego je to RunAsDate za pokretanje 64-bitnih programa. To znači da se na 32-bitnim Windowsima koristi samo RunAsDate, dok na 64-bitnim Windowsima možete koristiti oba: RunAsDate kada se želi pokrenuti 32-bitni program, a RunAsDate for x64 kada se želi pokrenuti 64-bitni program. Budući da se izvršna datoteka u obje ove inačice zove RunAsDate.exe, potrebno je npr. drugu preimenovati u RunAsDate64.exe ako obje datoteke želite spremiti u isti direktorij.

Više primjera može se naći u readme.txt unutar instalacijskih ZIP-datoteka. Budući da su opisi opcija za korištenje programa kroz CLI dosta šturi, najjednostavnije je zadati parametre putem grafičkog sučelja a zatim kliknuti na Create Desktop Shortcut čime se na Desktopu dobije ikona za pokretanje programa sa zadanim parametrima. U postavkama ikone pod Shortcut > Target možete naći točan oblik naredbe runasdate s pripadnim opcijama.

Kuharice: 
Vote: 
0
No votes yet