2009-12-07 10 views
8

posso utilizzare in seguito per aggiungere una data a un testo:Usa UFormat per ottenere il tempo unix

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

Ma io voglio l'ora in formato Unix. Posso ottenerlo per date -UFormat %s, ma posso usare la stessa sintassi?

Quando uso -UFormat %s ricevo 1260199855,65625, come faccio a rimuovere il decimale?

risposta

14

appena lanciato il risultato a un int modo:

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 

Utilizzando il metodo Parse intende la stringa viene analizzata "cultura consapevole" tale che il carattere separatore decimale appropriata è riconosciuto per la cultura corrente. Se si esegue il cast direttamente, PowerShell utilizza la cultura invariante che causa problemi per qualsiasi cultura in cui il carattere decimale separato non è un punto.

+0

Se uso [int] (get -date -UFormat% s), ottengo Impossibile convertire il valore "123456789,12345" per digitare "Sistema .Int32" . Errore: "La stringa di input non era in un formato corretto." – magol

+0

Hmm, mi chiedo se questo è un bug di localizzazione? –

+1

Apparentemente, PowerShell utilizza la cultura invariante quando costringe da una stringa a un numero, il che significa che solo un punto è riconosciuto come carattere separatore decimale. Ho aggiornato la risposta per accogliere. –

3

La mia soluzione:

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

ho fatto questo, arrotondato

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

Una soluzione ovvia quando la vedi :-) – magol

4

Ecco come lo faccio:

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

Questa è l'unica risposta che calcola un vero timestamp Unix (secondi dal 1970-01-01 00:00:00 ** UTC **). Si noti che da .NET 4.6 esiste un metodo dedicato per questo: '([DateTimeOffset] (Get-Date)). ToUnixTimeSeconds()' – argonym

1
[int](Get-Date -UFormat %s -Millisecond 0) 
Problemi correlati