#author("2022-11-22T20:47:41+09:00","","")
#navi(../)

* PowerShellで日時をUTC(Coordinated Universal Time)に変換する [#xd50678b]
ローカル時刻から協定世界時(UTC)を取得する方法を以下に記します。

#contents

* 動作確認環境 [#nad6ddc9]
- Windows 10 ver.22H2
- PowerShell
 PS C:\> $PSVersionTable.PSVersion.ToString()
 5.1.19041.1682

* 関連記事 [#pd56f456]
-[[Get-Dateコマンドレットで前日、翌日、前月、翌月などの日付を取得する方法>PowerShell/Get-Dateで前日、翌日、前月、翌月などの日付を取得する方法]]
-[[本日が月末かどうかを判定するスクリプト>PowerShell/本日が月末かどうかを判定するスクリプト]]
-[[PowerShellで文字列の日時をDateTimeオブジェクトにする方法>PowerShell/文字列の日時をDateTimeオブジェクトにする方法]]
-[[PowerShellで当日・指定日付の曜日を取得する方法>PowerShell/当日・指定日付の曜日を取得する方法]]
-[[PowerShellでUNIXTIMEを取得する方法>PowerShell/UNIXTIMEを取得する方法]]
-[[PowerShellでUNIXTIMEから通常の日時に変換する方法>PowerShell/UNIXTIMEから通常の日時に変換する方法]]

* DateTime.ToUniversalTimeメソッドで変換 [#f0c172c8]
[[Get-Dateコマンドレット>https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/get-date]] により現在日時の DateTime オブジェクトを取得し、ToUniversalTimeメソッドにより、UTCの時刻を取得しています。~
ローカル時間はJSTなので-9時間されているのが確認できます。

 PS C:\> Get-Date ; (Get-Date).ToUniversalTime()
 
 2022年11月22日 20:21:30
 2022年11月22日 11:21:30

 PS C:\> (Get-Date("2022/11/22 09:00:00")).ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")
 2022/11/22 00:00:00


** 出力フォーマット指定 [#bb721031]
また、以下のように出力フォーマットを指定することなどできます。~
出力フォーマット指定の例を以下に記します。

 PS C:\> Get-Date -Format "yyyy/MM/dd HH:mm K"
 2022/11/22 20:38 +09:00

 PS C:\> (Get-Date).ToString("yyyy/MM/dd HH:mm K")
 2022/11/22 20:38 +09:00

 PS C:\> (Get-Date).ToUniversalTime().ToString("yyyy/MM/dd HH:mm K")
 2022/11/22 11:39 Z


** オブジェクト内の値確認 [#rae6de42]
ローカルのタイムゾーンが日本(JST-9)で、ToUniversalTimeメソッドによりKindがUtcになっているのが確認できます。

 PS C:\> Get-TimeZone | Format-Table
 
 Id                  DisplayName                  StandardName  DaylightName  BaseUtcOffset SupportsDaylightSavingTime
 --                  -----------                  ------------  ------------  ------------- --------------------------
 Tokyo Standard Time (UTC+09:00) 大阪、札幌、東京 東京 (標準時) 東京 (夏時間) 09:00:00                           False

 PS C:\> Get-Date | Format-Table
 
 DisplayHint Date               Day DayOfWeek DayOfYear Hour  Kind Millisecond Minute Month
 ----------- ----               --- --------- --------- ----  ---- ----------- ------ -----
    DateTime 2022/11/22 0:00:00  22   Tuesday       326   20 Local         642     32    11

 PS C:\> (Get-Date).ToUniversalTime() | Format-Table
 
 Date               Day DayOfWeek DayOfYear Hour Kind Millisecond Minute Month Second
 ----               --- --------- --------- ---- ---- ----------- ------ ----- ------
 2022/11/22 0:00:00  22   Tuesday       326   11  Utc         309     32    11     33



以上、PowerShellでUTC日時を求める方法でした。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS