Datetime zu Unix-Timestamp umwandeln

Heute musste ich mir eine Funktion für Visual Basic Script schreiben, welche mir das aktuelle Datum und die Uhrzeit in einen Unixtimestamp konvertiert.

VB-Script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Function DateTime2UnixTimestamp (intJahr,intMonat,intTag,intStunde,intMinute,intSekunde)
	' Fixe Variablen definieren
	intSekundenProTag = 24 * CLng(3600)
	datBeginnDatum = DateSerial(1970, 1, 1)
 
	' Zu Datum zusammensetzen
	datDatum = DateSerial(intJahr, intMonat, intTag)
	' Differenz seit 01.01.1970 in Tagen errechnen
	intTage = datDatum - datBeginnDatum
 
	' Zeitangebe in Sekunden umrechnen
	datDatumInSekunden = (intStunde * 3600) + (intMinute * 60) + intSekunde
 
	' Gesamtergebnis ausgeben
	DateTime2UnixTimestamp = ((intTage * intSekundenProTag) + datDatumInSekunden)
End Function
 
Wscript.echo DateTime2UnixTimestamp(2009, 12, 31, 13, 53, 24)

Unix-Timestamp in lokale DateTime umrechnen

Bei Serverdiensten, die auf einem Linux-Betriebssystem laufen, wird häufig das Datum und die Uhrzeit im Unix-Timestamp – Format protokolliert. Dieser Zeitstempel zählt einfach jede vergangene Sekunde seit dem 1. Januar 1970 (UTC-Zeit). Hinzu kommt noch, dass viele Server nicht die Zeitzonen verwenden, sondern die UTC-Zone.

Die folgende Zeile nimmt nun die aktuelle lokale Zeitzone und addiert seit dem 01.01.1970 den Timestamp hinzu. Die Umrechnung sieht dann wie folgt aus:

1
[timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds(1546843450))

“1546843450″ ist in diesem Beispiel der Timestamp.

Wer das Datum und die Uhrzeit ohne Umrechnung in die lokale Zeit machen möchte, der kann die o.g. Zeile um “.ToUniversalTime()” am Ende erweitern und erhält weiterhin UTC.

Verzeichnis mit aktuellem Datum erstellen

Für Protokolle oder Sicherungen benötigt man immer wieder Verzeichnisse die täglich neu angelegt werden und die das aktuelle Datum enthalten.
Das folgende Skript legt ein Verzeichnis im folgenden Format an: Backup_Jahr-Monat-Tag, also z.B. “Backup_2009-02-10″

Batch-Skript:

1
2
3
4
5
SET Jahr=%date:~-4%
SET Monat=%date:~-7,2%
SET Tag=%date:~-10,2%
 
mkdir "Backup_%Jahr%-%Monat%-%Tag%"

WMI-Zeitformat in lesebares Format konvertieren

In dem ersten Beispiel wird ganz einfach das Datum und die Uhrzeit des letzten PC-Neustarts per WMI ausgelesen. Leider stellt man nun fest, dass dies ein anderes Format (WMI-Format) hat, als das, was wir sonst gewohnt sind.

1
Get-WmiObject -Class Win32_OperatingSystem -Property LastBootUpTime

Das folgende Beispiel macht genau das selbe, aber wandelt das Format mit “ConvertToDateTime” in ein gut lesbares vom Typ “System.DateTime” um.

1
2
$temp = Get-WmiObject -Class Win32_OperatingSystem -Property LastBootUpTime
$temp.ConvertToDateTime($temp.LastBootUpTime)