2009-12-07 12 views
8

puedo usar siguiente para añadir una fecha para un texto:Uso UFormat para conseguir Tiempo Unix

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

Pero yo quiero la hora en formato Unix. Puedo obtenerlo por date -UFormat %s, pero ¿puedo usar la misma sintaxis?

Cuando uso -UFormat %s obtengo 1260199855,65625, ¿cómo elimino el decimal?

Respuesta

14

Sólo echado el resultado 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 

Utilizando el método Parse significa que la serie se analiza la "cultura conscientes" de tal manera que el carácter separador decimal adecuada es reconocido por la cultura actual. Si solo hace el colado directamente, PowerShell usa la cultura invariante que causa problemas para cualquier cultura donde el sep sep no es un punto.

+0

Si utilizo [int] (get -date -UFormat% s), obtengo No puedo convertir el valor "123456789,12345" al tipo "Sistema .Int32 ". Error: "La cadena de entrada no estaba en el formato correcto". – magol

+0

Hmm, me pregunto si esto es un error de localización? –

+1

Aparentemente, PowerShell utiliza el método de cultivo invariante cuando se fuerza desde una cadena a un número, lo que significa que solo se reconoce un período como el carácter separador decimal. He actualizado la respuesta para acomodar. –

3

Mi solución:

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

lo hice, redondeado

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

Una solución obvia cuando lo veas :-) – magol

4

Así es como lo hago:

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

Esta es la única respuesta que calcula una marca de tiempo de Unix real (segundos desde 1970-01-01 00:00:00 ** UTC **). Tenga en cuenta que desde .NET 4.6 hay un método dedicado para ello: '([DateTimeOffset] (Get-Date)). ToUnixTimeSeconds()' – argonym

1
[int](Get-Date -UFormat %s -Millisecond 0) 
Cuestiones relacionadas