Back in time

Hin uns wieder steht man als Entwickler vor der Aufgabe einen Prozess zu verschiedenen Zeitpunkten zu testen. Das löst man meist recht pragmatisch indem man die Systemzeit ändert und sodann seine Tests durchführt. Dies hat jedoch oftmals einen unangenehmen Beigeschmack, der sich unter anderem im folgenden bemerkbar macht:

  1. Andere Programme legen ein ungewolltes Verhalten an den Tag
  2. Andere Benutzer auf dem gleichen System sind ebenfalls von  der Zeitumstellung betroffen
  3. Der Taskplaner startet Jobs die während der gegenwärtigen Uhrzeit das System negativ beeinflussen
  4. Zertifikate werden plötzlich ungültig
  5. Logeinträge des Systems sowie jene diverser Applikationen sind möglicherweise nicht mehr zuordnbar bzw. nur schwer nachvollziehbar

Welche Gründe man nun auch immer für die Zeitumstellung hat und sich mit den damit verbundenen Problemen herumschlagen muss – sofern die Entwicklung auf einem Windowssystem stattfindet ist man mit dem Tool RunAsDate in der Lage einen beliebigen Prozess mit einer eigenen Zeiteinstellung gezielt zu starten. Dafür klinkt dieses Tool sich in die Kernel-API ein und manipuliert die Zeit für den Prozess mit der übergebenen Zeiteinstellung.

Einen PHP-Webserver in anderen Zeiten starten:

RunAsDate.exe /movetime 01\01\2001 18:15:00 C:\php5\php.exe -S localhost:8000 -t D:\var\www\mydomain\

PHP im CLI-Modus starten:

RunAsDate.exe /movetime 01\01\2001 18:15:00 C:\php5\php.exe -r “date(‘Y-m-d H:i:s’);fgets( STDIN );”

Beachte:

  1. Manche Zeiteinstellungen z.B. vor 2000 oder ein Datum vor bestimmten Zeitpunkten zu den das Programm einfach seine Kalkulationen unterlässt lassen das gewünschte Programm nicht starten oder zu ungewünschten Ergebnissen führen
  2. Es ist nicht empfehlenswert Programme zu starten, die einer zeitlichen Beschränkung unterliegen, da diese möglicherweise das intern gegenprüfen und so ihren Dienst künftig gänzlich verweigern

Download:

http://www.heise.de/download/runa04sdate-1169076.html