Weisheiten - der Netz-Weise Blog
Unix/MySQL Timestamp in Datumswerte mit Powershell umwandeln
In Unix und MySQL werden Datumswerte oft als Timestamps angegeben. Ein Timestamp ist eigentlich ein Datums/Zeitwerte, der aber als Integer gespeichert ist und die Sekunden ab dem 1.01.1970 angibt. Diese Zeitzählung wird auch als "Epoch date" bezeichnet.
Die Umwandlung in einen Datumswert in Powershell ist eigentlich recht einfach, da uns Powershell alle zur Umrechung notwendigen Funktionen zur Verfügung stellt. Das Datum des 1.1.1970 liefert uns get-Date:
Get-Date '1/1/1970'
Get-Date liefert ein Objekt vom Type Datetime zurück. Alle Objekte vom Typ Datetime besitzen eine Reihe von Methoden für die Datumsmanipulation. Wir benötigen hier die Methode AddSeconds() zum Aufaddieren von Sekunden:
$Timestamp = 1464257993
(Get-Date '1/1/1970').AddSeconds($Timestamp)
Die Rückkonvertierung können wir mti Hilfe von New-Timespan durchführen. Dieses Cmdlet berechnet eine Zeitspanne anhand von zwei Daten und gibt unter anderem auch die Anzahl in Sekunden zwischen den beiden Zeitspannen aus:
[int]$timeStamp = (New-Timespan -Start (get-Date '1/1/1970') -End (get-date)).TotalSeconds
Das Ganze können wir auch in zwei kleine Funktionen gießen:
<#
.Synopsis
Konvertiert einen Timestamp (Epochdate) in Datetime
.DESCRIPTION
Konvertiert einen Timestamp (Epochdate) in Datetime. Als Übergabeparameter wird der Timestamp als
Integer übergeben
.EXAMPLE
ConvertFrom-UnixTimeStamp -TimeStamp 1464257993
#>
Function ConvertFrom-UnixTimeStamp
{
param (
# Der Zeitstempel als Integer
[Parameter(ValueFromPipeline=$true)]
[int]$TimeStamp
)
(Get-Date '1/1/1970').AddSeconds($Timestamp)
}
Und eine Funktion zum Umwandeln in Timestamps:
<#
.Synopsis
Konvertiert einen Datetime-Datentyp in eine Unix Timestamp (Epochdate)
.DESCRIPTION
Konvertiert einen Datetime-Datentyp in eine Unix Timestamp (Epochdate). Als Übergabeparameter wird ein Datum
(auch als String) angenommen
.EXAMPLE
Convertto-UnixTimestamp -Date '11.11.2011'
#>
Function ConvertTo-UnixTimeStamp
{
param (
# Der umzuwandelnde Datumstyp
[Parameter(ValueFromPipeline=$true)]
[ValidateScript({ Try{ $_ -as [datetime]} Catch { $false } })]
$Date = (get-Date)
)
[int](New-Timespan -Start (get-Date '1/1/1970') -End (get-date $date)).TotalSeconds
}
Eine umfangreiche Beschreibung für die Konvertierung in verschiedenste Formate findet man hier:
http://www.epochconverter.com/
Kommentare