2009-12-07 8 views
8

zu bekommen ich folgende verwenden können, um ein Datum zu einem Text anfügen:Verwenden UFormat Unix-Zeit

"Foo {0:G} Foo" -f (date)  #returns "Foo 2009-12-07 15:34:16 Foo" 

Aber ich möchte die Zeit in Unix-Format. Ich kann es durch date -UFormat %s bekommen, aber kann ich die gleiche Syntax verwenden?

Wenn ich -UFormat %s verwende, bekomme ich 1260199855,65625, wie entferne ich die Dezimalstelle?

Antwort

14

gegossen nur das Ergebnis an eine int etwa so:

PS> [int][double]::Parse((Get-Date -UFormat %s)) 
1260172909 

PS> "Foo {0:G} Foo" -f [int][double]::Parse((Get-Date -UFormat %s)) 
Foo 1260172997 Foo 

die Methode Parst Mit der Benutzung des String syntaktisch analysiert wird „culture aware“, so dass die entsprechenden dezimalen Trennzeichen für die aktuelle Kultur erkannt wird. Wenn Sie nur direkt umwandeln, verwendet PowerShell die invariante Kultur, die Probleme für jede Kultur verursacht, in der die Dezimaltrennzeichen keine Periode sind.

+0

Wenn ich [int] (get -date -UFormat% s), bekomme ich Kann den Wert "123456789,12345" nicht konvertieren, um "System" einzugeben .Int32 ". Fehler: "Die Eingabezeichenfolge hatte kein richtiges Format." – magol

+0

Hmm, frage mich, ob das ein Lokalisierungsfehler ist? –

+1

Offensichtlich verwendet PowerShell eine invariante Kultur, wenn von einer Zeichenfolge auf eine Zahl gezwungen wird, was bedeutet, dass nur ein Punkt als Dezimaltrennzeichen erkannt wird. Ich habe die Antwort aktualisiert. –

3

Meine Lösung:

(Get-Date -UFormat %s) -Replace("[,\.]\d*", "") 
3

Ich tat dies, aufzurunden

[System.Math]::Round((date -UFormat %s),0) 
+0

Eine offensichtliche Lösung, wenn Sie es sehen :-) – magol

4

Hier ist, wie ich es tun:

$DateTime = (Get-Date).ToUniversalTime() 
$UnixTimeStamp = [System.Math]::Truncate((Get-Date -Date $DateTime -UFormat %s)) 
+0

Dies ist die einzige Antwort, die einen tatsächlichen Unix-Zeitstempel berechnet (Sekunden seit 1970-01-01 00:00:00 ** UTC **). Beachten Sie, dass es seit .NET 4.6 eine dedizierte Methode dafür gibt: '([DateTimeOffset] (Get-Date)). ToUnixTimeSeconds()' – argonym

1
[int](Get-Date -UFormat %s -Millisecond 0) 
Verwandte Themen