AWS CLIでコマンドを作っていると、UTCやJSTのタイムゾーンが混じってて泣くことがあります。。。
毎回毎回、JSTからUTCへの変換を電卓やWebサイトを使って行っていたのですが、、、流石に効率が悪いので、PowerShellでの変換方法を調べてみました。
目次
検証環境
- 検証日: 2022/06/25
- PC環境:
- Windows10 Home Ver21H1
- PowerShell: Ver7.1.5
- AWS CLI:
aws-cli/2.1.34 Python/3.8.8 Windows/10 exe/AMD64 prompt/off
-- profile default
: 読み取り専用-- profile aws_RW
: 書き込み権限あり- ※ 誤操作防止のため、変更操作時のみ
-- profile
オプション付与。
- ※ 誤操作防止のため、変更操作時のみ
-- profile aws_PF
: SystemsManagerポートフォワーディング用
- Windows10 Home Ver21H1
注意事項
- 本記事の内容は
Windows PowerShell
で検証しています。 - AWS CLIは
バージョン2
を使用しています。- 本記事のコマンド出力で
YAML
を使用してますが、これはバージョン2の機能です。
- 本記事のコマンド出力で
- コマンド内の変数やパラメータやは検証で使用したものを記載しています。ご自身の環境に合わせ、書き換えて使用してください。
- 個人で検証しているため実行結果に責任は持てません。必ずご自身でも検証してから使用してください。
1. PCのタイムゾーンを確認する
僕は日本在住なので、タイムゾーンは東京(JST, GMT+9)です。
Get-TimeZone ## 出力例 PS C:\Users\blotoyo> Get-TimeZone Id : Tokyo Standard Time DisplayName : (UTC+09:00) 大阪、札幌、東京 StandardName : 東京 (標準時) DaylightName : 東京 (夏時間) BaseUtcOffset : 09:00:00 SupportsDaylightSavingTime : False
2. JST(現在時刻)をUTCで出力する
2.1. 現在時刻をUTCに変換して出力する
Get-Dateコマンドレット
: 日付・時刻情報を取得するToUniversalTimeメソッド
: Get-Dateの値をUTCに変換する- 複数行あるのは出力(整形)のフォーマットを変えています
(Get-Date).ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss") (Get-Date).ToUniversalTime().ToString("yyyy/MM/dd HH:mm") (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mmZ") ## 出力例 PS C:\Users\blotoyo> (Get-Date).ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss") 2022-06-24 22:48:51 PS C:\Users\blotoyo> (Get-Date).ToUniversalTime().ToString("yyyy/MM/dd HH:mm") 2022/06/24 22:48 PS C:\Users\blotoyo> (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mmZ") 2022-06-24T22:48Z
2.2. 現在時刻から-9時間して出力する
ToUniversalTimeメソッド
: Get-Dateの値に時間数を加減して出力する- 複数行あるのは出力(整形)のフォーマットを変えています
Get-Date (Get-Date).AddHours(-9) -format "yyyy/MM/dd HH:mm:ss" Get-Date (Get-Date).AddHours(-9) -format "yyyyMMdd_HH:mm:ss" Get-Date (Get-Date).AddHours(-9) -format "yyyy-MM-ddTHH:mmZ" ## 出力例 PS C:\Users\blotoyo> Get-Date (Get-Date).AddHours(-9) -format "yyyy/MM/dd HH:mm:ss" 2022/06/24 23:04:04 PS C:\Users\blotoyo> Get-Date (Get-Date).AddHours(-9) -format "yyyyMMdd_HH:mm:ss" 20220624_23:04:04 PS C:\Users\blotoyo> Get-Date (Get-Date).AddHours(-9) -format "yyyy-MM-ddTHH:mmZ" 2022-06-24T23:04Z
3. JST(指定時刻)をUTCで出力する
System.DateTime
へ指定時刻を入れてTypeをDateTimeにし、.AddHours(-9)
で-9時間して、.ToString
でフォーマットを修正しています。
※【注意】.AddHours(-9)
を.ToString
の前に持ってくること。
.ToString
を先にしてしまうとTypeがStringに変わってしまい、.AddHours(-9)
が処理出来ない。
([System.DateTime]"2022/06/01 09:00:00").AddHours(-9).ToString("yyyy-MM-dd HH:mm:ss") ([System.DateTime]"2022-06-01 09:00:00").AddHours(-9).ToString("yyyy-MM-ddTHH:mm:ssZ") ([System.DateTime]"2022-06-01 09:00").AddHours(-9).ToString("yyyy/MM/dd HH:mm:ss") ## 出力例 PS C:\Users\blotoyo> ([System.DateTime]"2022/06/01 09:00:00").AddHours(-9).ToString("yyyy-MM-dd HH:mm:ss") 2022-06-01 00:00:00 PS C:\Users\blotoyo> ([System.DateTime]"2022-06-01 09:00:00").AddHours(-9).ToString("yyyy-MM-ddTHH:mm:ssZ") 2022-06-01T00:00:00Z PS C:\Users\blotoyo> ([System.DateTime]"2022-06-01 09:00").AddHours(-9).ToString("yyyy/MM/dd HH:mm:ss") 2022/06/01 00:00:00
指定時刻部分を変数にしてみる。
${specify_time} = "2022-06-01 09:00" ([System.DateTime]"${specify_time}").AddHours(-9).ToString("yyyy/MM/dd HH:mm:ss") ## 出力例 PS C:\Users\blotoyo> ${specify_time} = "2022-06-01 09:00" PS C:\Users\blotoyo> ([System.DateTime]"${specify_time}").AddHours(-9).ToString("yyyy/MM/dd HH:mm:ss") 2022/06/01 00:00:00