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との相互変換ができました。



