0

投稿日

Organization

PowerShellでUNIX timeをあつかってみる

PowerShelldatetimeをから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(秒)で表示してくれます。

Get-Date/UFormat/notes

Get-DateのUFormatオプションを利用して変換
# 1992年7月6日(日本時間)をUnixTimeに変換
# 今回実行している端末のタイムゾーンは`Tokyo Standard Time`なので日本時間
Get-Date -Date "1992/07/06 00:00:00" -UFormat "%s"

image.png

.NetのDateTimeOffsetを利用する

.NetのDateTimeOffsetToUnixTimeSecondsが用意されているので、こちらを利用すれば変換できます。

DateTimeOffset.ToUnixTimeSeconds メソッド

DateTimeOffsetのToUnixTimeSecondsを利用して変換
# 1992年7月6日(日本時間)をUnixTimeに変換
# 今回実行している端末のタイムゾーンは`Tokyo Standard Time`なので日本時間
$dateTime = Get-Date -Date "1992/07/06 00:00:00"

([datetimeoffset]$dateTime).ToUnixTimeSeconds()

image.png

Convert to Date from Unix Time

UnixTimeSecondsオプションを利用する(PowerShell 7.1以上)

PowerShell 7.1から Get-DateコマンドレットにUnixTimeSecondsオプションが追加されているためこのオプションを利用すればUnixTime(秒)Dateに変換してくれます。

Get-DateのUnixTimeSecondsオプションを利用して変kん
# 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

image.png

.NetのDateTimeOffsetを利用する

.NetのDateTimeOffsetFromUnixTimeSecondsが用意されているので、こちらを利用すれば変換できます。

DateTimeOffset.FromUnixTimeSeconds(Int64) メソッド

DateTimeOffsetのFromUnixTimeSecondsを利用して変換
# 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)

image.png

総評

PowerShellUNIX Timeを扱うには、.NetDateTimeOffSetを利用すれば便利に扱えますが。

PowerShell 7.1からはGet-DateコマンドレットにUnixTimeSecondsが追加されており、Get-DateコマンドレットだけでもUNIX Timeとの相互変換ができました。

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
ログインすると使える機能について
0