Question/Problem
異なる端末でDateTime.Nowで取得した日時が違います。原因を教えてください。
Resolution
DateTime.Nowはマイクロソフト社の.NETの仕様に準じており、システムのタイムゾーンを参照しています。
※参考:「DateTime.Now プロパティ」
そのため、端末のタイムゾーン設定が異なる場合、DateTime.Nowで取得した結果は異なる可能性があります。
DateTime.Nowのタイムゾーンを統一したい場合、以下のいずれかの解決策を実施してください。
解決策1)手動でシステム設定の「時刻と言語 > 日付と時刻」のタイムゾーンを変更する
解決策2)DateTime.nowを取得する前に「PowerShellを呼び出し」アクティビティで Set-TimeZoneコマンドを実行する
※参考:「Set-TimeZone」
例: Set-TimeZone -Id “Tokyo Standard Time” を実行すると、システムタイムゾーンが日本時間に変更されます。
これにより、DateTime.Now がシステムタイムゾーンを参照する際に、必ず日本時間となります。
この解決策は、システム設定の「時刻と言語 > 日付と時刻」からタイムゾーンを手動で変更する場合と同様に、システム設定が変更されるため、ご注意ください。
解決策3) DateTime.nowで取得された DateTime対象のタイムゾーンを変更する
例:以下のコードのように、取得された DateTime対象のタイムゾーンを意図的にJST(日本標準時)に変更します。
代入アクティビティ:(データ型:System.TimeZoneInfo)
jstZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time")
代入アクティビティ:(データ型:System.DateTime)
jstTime = TimeZoneInfo.ConvertTime(DateTime.Now, jstZone)
取得した日本時刻を出力:
jstTime.ToString()