PowerShell SQLite モジュールを使用してSQLiteデータベースを解析していますが、いくつかの戻り値が作成および変更されています。どちらもUnix時間です。
私がやりたいのは、どういうわけかそれを「人間の時間」に変換することです。読みやすくするために、他のSQLクエリのいくつかを削除しました。
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
}
出力は、Unixタイムスタンプの大きな列のように見えます。
1337329458
更新:私は最終的に次のことを行いました:
$ctime = $entry.created
[datetime]$Origin = '1970-01-01 00:00:00'
$Origin.AddSeconds($ctime)
nixタイムスタンプを.NET DateTimeに変換するを参照してください。
これはPowerShellで簡単に再現できます。
$Origin = New-Object -Type DateTime -ArgumentList 1970, 1, 1, 0, 0, 0, 0
$whatIWant = $Origin.AddSeconds($unixTime)
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.
$date = get-date "1/1/1970"
$date.AddSeconds($unixTime).ToLocalTime()
シンプルなワンライナー:
(Get-Date "1970-01-01 00:00:00.000Z") + ([TimeSpan]::FromSeconds($unixTime))
使用する:
(([System.DateTimeOffset]::FromUnixTimeSeconds($unixTime)).DateTime).ToString("s")
FromUnixTimeMilliseconds
もご利用いただけます。
ToString( "s"):並べ替え可能: "パターンは定義された標準(ISO 8601)を反映しています"
$ctime = $entry.created
[datetime]$Origin = '1970-01-01 00:00:00'
$Origin.AddSeconds($ctime)