Wie konvertiere ich in PowerShell DateTime in die UNIX-Zeit?

8

Wie kann ich in PowerShell die Zeichenfolge von DateTime in die Summe von Sekunden konvertieren?

    
RRR 16.11.2010, 10:05
quelle

12 Antworten

16
%Vor%

New-TimeSpan kann dafür verwendet werden. Zum Beispiel

%Vor%     
ravikanth 16.11.2010, 10:33
quelle
14

Wie erwähnt, ist die UNIX-Epoche der 1. Januar 1970 um 12:00 Uhr (Mitternacht) UTC . Um die aktuellen Sekunden seit der Epoche in UTC in einer ganzen Zahl zu erhalten, benutze ich diesen 80-Zeichen-Einzeiler

%Vor%

Der obige Code ist PowerShell 2.0-kompatibel & amp; abgerundet (um ein konsistentes Verhalten mit UNIX zu gewährleisten)

    
Signal15 18.09.2014 15:12
quelle
10

Dieser One-Liner funktioniert für mich (im Vergleich zu Ссылка )

%Vor%

Für Millisekunden

%Vor%     
lazlev 25.09.2015 08:17
quelle
8

Mit .NET Framework 4.6 können Sie die Methode ToUnixTimeSeconds der Klasse DateTimeOffset verwenden :

%Vor%     
PetSerAl 14.12.2015 16:27
quelle
5

Um Sekunden seit 1970 unabhängig von der Zeitzone zu bekommen, würde ich gehen mit:

%Vor%     
Keith Hill 16.11.2010 17:00
quelle
3

Ich wollte nur noch einen anderen und hoffentlich einfacheren Weg vorstellen, dies anzugehen. Hier ist ein Liner, den ich verwendet habe, um die aktuelle Unix-Zeit in UTC zu erhalten:

%Vor%

Von innen nach außen brechen:

(Get-Date) .ToUniversalTime ()

Dies ruft das aktuelle Datum / die aktuelle Uhrzeit in der UTC-Zeitzone ab. Wenn Sie die Ortszeit haben möchten, rufen Sie einfach Get-Date auf. Dies wird dann als Eingabe für ...

verwendet

[lang] (Get-Date -Date (UTC Datum / Uhrzeit von oben) -UFormat% s)

Konvertieren Sie das UTC-Datum / die UTC-Zeit (vom ersten Schritt) in das Unix-Format. Das -UFormat% s teilt Get-Date mit, dass das Ergebnis als Unix-Epochenzeit zurückgegeben wird (Sekunden seit dem 1. Januar 1970 00:00:00). Beachten Sie, dass dies einen double -Datentyp (im Grunde eine Dezimalzahl) zurückgibt. Durch Umwandlung in einen langen -Datentyp wird dieser automatisch in eine 64-Bit ganze Zahl (keine Dezimalzahl) konvertiert (gerundet). Wenn Sie die zusätzliche Genauigkeit der Dezimalzahl wünschen, können Sie sie nicht auf einen langen -Typ anwenden.

Zusätzliches Guthaben

Eine andere Möglichkeit zum Konvertieren / Runden einer Dezimalzahl in eine ganze Zahl ist die Verwendung von System.Math :

%Vor%     
Sean Staats 26.01.2017 16:21
quelle
1

Ich schlage folgendes vor, das auf Ticks (Int64) statt auf Sekunden (Int32) basiert, um das Jahr-2038-Problem zu vermeiden. [Math] :: Floor wird verwendet, da die Unix-Zeit auf der Anzahl der ganzen Sekunden seit der Epoche basiert.

%Vor%     
Gary Pendlebury 15.06.2015 15:09
quelle
1

Hier ist ein Skript, das sowohl TO als auch FROM CTIME konvertiert, das ich schon länger benutzt habe (länger, weil es für eine Crowd vom Typ "new to scripting" mit verschiedenen Kommentaren geschrieben wurde).

%Vor%

Ich hoffe, das hilft, vor allem, wenn Sie einfach etwas wollen, das für Anfänger oder so ein bisschen freundlicher ist:).

    
Ygramul 26.01.2017 16:58
quelle
0

Unter Cmdlet wird die Windows-Verfügbarkeit in Unix-verständliches Epochenformat umgewandelt:

%Vor%     
sushena 23.08.2016 10:36
quelle
0

Wieder im Vergleich zu Ссылка und aufbauend auf anderen oben

%Vor%     
Jim Moyle 17.10.2016 12:59
quelle
0

Dies sollte auch funktionieren, da JavaScript seit der Epoche Millisekunden verwendet:

%Vor%

Schritt für Schritt:

%Vor%     
miljbee 15.01.2018 14:17
quelle
0

Powershell $ epoch = (Get-Date -Date ((Get-Date) .DateTime) -UFormat% s)

    
Neal Garrett 13.02.2018 23:44
quelle

Tags und Links