web-dev-qa-db-ja.com

PowerShellでUnix時間を変換する

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)
8
mrwh1t3

nixタイムスタンプを.NET DateTimeに変換するを参照してください。

これはPowerShellで簡単に再現できます。

$Origin = New-Object -Type DateTime -ArgumentList 1970, 1, 1, 0, 0, 0, 0
$whatIWant = $Origin.AddSeconds($unixTime)
22
JohnB
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.
16
uknzguy
$date = get-date "1/1/1970"
$date.AddSeconds($unixTime).ToLocalTime()
8
VMwareWolf

シンプルなワンライナー:

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

使用する:

(([System.DateTimeOffset]::FromUnixTimeSeconds($unixTime)).DateTime).ToString("s")

FromUnixTimeMillisecondsもご利用いただけます。

ToString( "s"):並べ替え可能: "パターンは定義された標準(ISO 8601)を反映しています"

参照:標準の日付と時刻の形式文字列、並べ替え可能な( "s")形式指定子

4
Fredrick
$ctime = $entry.created
[datetime]$Origin = '1970-01-01 00:00:00'
$Origin.AddSeconds($ctime)
1
mrwh1t3