Die 01/01/1601 Frage

Immer wenn ich über ein Script eine Zeitwert aus dem Active Directory abfrage wundere ich mich über das Ergebnis :-). Heute war es wieder soweit. Eigentlich wollte ich nur von allen Benutzern das Datum der letzten Anmeldung wissen. In VB Script ein “Dreizeiler” doch die Umrechnung des Rückgabewertes in etwas “lesbares” war dann wieder länger als die eigentliche Abfrage.

Ok – stimmt nicht ganz, aber trotzdem. Wer selbst schon einmal mit den Windows Timestamps gearbeitet hat dem ist sicher aufgefallen dass es SEHR lange Zahlen gibt die umgerechnet werden wollen. Für jeden Zeitstempel aus dem AD bekommt man als Rückgabe die Anzahl der vergangenen 100 Nanosekunden Intervalle seit dem 01. Januar 1601.

Genau an dieser Stelle frage ich mich dann immer – warum der 01. Januar 1601. Um ein historisches Datum aus der Microsoft Geschichte kann es sich nicht handeln, ebensowenig um sonst eine Person die etwas mit der modernen Datenverarbeitung zu tun hat. Wikipedia gibt auch nicht wirklich viel her.

Heute Abend habe ich etwas recherchiert und folgendes gefunden:

This is to do with leap years having 400 years cycle and 1st of January 1601 being a Monday. If modulo (MOD) function is performed in a date integer mod 7 the result will be the day of the week.

Aha. Also so gesehen war es Zufall – oder viel mehr Mathematik. Der 1. Januar 1601 wurde also gewählt weil 1600 ein Schaltjahr war. Allerding war es ein besonderes Schaltjahr. Denn ein Schaltjahr ist immer wenn die Jahreszahl durch vier teilbar ist. Die vollen Jahrhunderte sind aber wiederum kein Schaltjahr. Es sei denn das Jahr ist durch 400 teilbar. So wie eben 1600 und auch das Jahr 2000. Zufälligerweise war der 01. dann auch noch ein Montag was die Berechnung des Wochentags sehr einfach macht.

Eigentlich clever gemacht – doch kommt da ein kleines Problemchen auf uns zu. Da es sich beim Timestamp um ein 64-bit Wert handelt ist im Jahr 2038, also in nicht einmal 28 Jahren, ende. Dann läuft der Wert über und wir sind wieder im Jahr 1601.

Unter Unix wird der 01. Januar 1970 als Basis für den Timestamp genommen, dort hat man also noch 370 Jahre Zeit bis man eine Lösung finden muss :-).

 

Wer die aktuelle Zeit in einen Timestamp umrechnen will / muss – hier ein Link

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s