PowerShell
でdatetime
をからUNIX time
に変換したり、Unix time
からdatetime
に変換したり。
Convert to UNIX time from Date
Get-DateコマンドレットのUFormatオプション
Get-Date
コマンドレットのUFormat
で出力の形式を設定する事ができ、ドキュメントには%s
を指定するとSeconds elapsed since January 1, 1970 00:00:00
と記載されておりUnixTime(秒)
で表示してくれます。
# 1992年7月6日(日本時間)をUnixTimeに変換
# 今回実行している端末のタイムゾーンは`Tokyo Standard Time`なので日本時間
Get-Date -Date "1992/07/06 00:00:00" -UFormat "%s"
.NetのDateTimeOffsetを利用する
.NetのDateTimeOffset
にToUnixTimeSeconds
が用意されているので、こちらを利用すれば変換できます。
DateTimeOffset.ToUnixTimeSeconds メソッド
# 1992年7月6日(日本時間)をUnixTimeに変換
# 今回実行している端末のタイムゾーンは`Tokyo Standard Time`なので日本時間
$dateTime = Get-Date -Date "1992/07/06 00:00:00"
([datetimeoffset]$dateTime).ToUnixTimeSeconds()
Convert to Date from Unix Time
UnixTimeSecondsオプションを利用する(PowerShell 7.1以上)
PowerShell 7.1
から Get-Date
コマンドレットにUnixTimeSeconds
オプションが追加されているためこのオプションを利用すればUnixTime(秒)
をDate
に変換してくれます。
# 1992年7月6日(日本時間)をUnixTimeに変換
# 今回実行している端末のタイムゾーンは`Tokyo Standard Time`なので日本時間$unixTime = $unixTime = Get-Date -Date "1992/07/06 00:00:00" -UFormat "%s"
# UnixTimeSecondsオプションを利用して変換
Get-Date -UnixTimeSeconds $unixTime
.NetのDateTimeOffsetを利用する
.NetのDateTimeOffset
にFromUnixTimeSeconds
が用意されているので、こちらを利用すれば変換できます。
DateTimeOffset.FromUnixTimeSeconds(Int64) メソッド
# 1992年7月6日(日本時間)をUnixTimeに変換
# 今回実行している端末のタイムゾーンは`Tokyo Standard Time`なので日本時間$unixTime = $unixTime = Get-Date -Date "1992/07/06 00:00:00" -UFormat "%s"
# PowerShellでunix時間変換(.NetのdatetimeoffsetのFromUnixTimeMillisecondsメソッドを利用)
[datetimeoffset]::FromUnixTimeSeconds($unixTime)
総評
PowerShell
でUNIX Time
を扱うには、.Net
のDateTimeOffSet
を利用すれば便利に扱えますが。
PowerShell 7.1
からはGet-Date
コマンドレットにUnixTimeSeconds
が追加されており、Get-Date
コマンドレットだけでもUNIX Time
との相互変換ができました。