2012-05-28 17 views
5

Sto analizzando un database SQLite utilizzando il modulo PowerShell SQLite e un paio di valori restituiti vengono creati e modificati, entrambi in tempo Unix.Converti tempo Unix con PowerShell

Quello che mi piacerebbe fare è in qualche modo convertirlo in "tempo umano". Ho rimosso alcune delle altre query SQL per facilità di lettura.

Import-Module SQLite 
mount-sqlite -name GoogleDrive -dataSource E:\Programming\new.db 
$cloud_entry = Get-ChildItem GoogleDrive:\cloud_entry 

foreach ($entry in $cloud_entry) 
{ 
    $entry.created 
} 

sono andato con il seguente:

$ctime = $entry.created 
[datetime]$origin = '1970-01-01 00:00:00' 
$origin.AddSeconds($ctime) 

L'uscita si presenta come una grande colonna di timestamp Unix:

1337329458 

risposta

12

http://codeclimber.net.nz/archive/2007/07/10/convert-a-unix-timestamp-to-a-.net-datetime.aspx

Si può facilmente riprodurre questo in PowerShell .

$origin = New-Object -Type DateTime -ArgumentList 1970, 1, 1, 0, 0, 0, 0 
$whatIWant = $origin.AddSeconds($unixTime) 

Edit: Scusa, gli errori corretti.

+5

'[datetime] $ origine = '1970-01-01 00: 00: 00'' funziona altrettanto bene, e è forse un po 'più facile da capire –

+0

Ricevo questo errore: qualche idea? Impossibile convertire l'argomento "0", con valore: "", per "AddSeconds". Alcuni dei valori sono "null", in quanto alcuni degli elementi nel database non sono assegnati a una data di creazione/modifica. Sto assumendo che questo è da dove viene questo errore. – mrwh1t3

1
$ctime = $entry.created 
[datetime]$origin = '1970-01-01 00:00:00' 
$origin.AddSeconds($ctime) 
8
Function Convert-FromUnixDate ($UnixDate) { 
    [timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($UnixDate)) 
} 

$niceTime = Convert-FromUnixDate $ctime 

PS C:\> $niceTime 

Friday, 18 May 2012 8:24:18 p.m. 
2
$date = get-date "1/1/1970" 
$date.AddSeconds($unixTime).ToLocalTime() 
1

un semplice rivestimento:

(Get-Date "1970-01-01 00:00:00.000Z") + ([TimeSpan]::FromSeconds($unixTime))