RealPath:
WebPath:
2018/08/12 10:29 (JST) 更新
Tips >>

DateTimeの扱い

Contents

これは ASP.NET MVC の話というよりは .NET 全般の技術の話なのですが、何故ここで DateTime に触れるかというと、Azure ではだいたいの場合(Japan East リージョンを使ったとしても)タイムゾーンが UTC に固定されていることが多いからです。

そのような事情があるため、DateTime を扱う際には明示的にタイムゾーンを意識することを推奨します。

以下は実際に Azure の App Service (Japan East Region) で実行したコードの結果です。

var fmt = "yyyy/MM/dd HH:mm:ss";

TimeZone.CurrentTimeZone.StandardName = Coordinated Universal Time
TimeZone.CurrentTimeZone.DaylightName = Coordinated Universal Time
TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow) = 00:00:00

DateTime.Now.ToString(fmt) = 2018/11/08 14:15:23
DateTime.UtcNow.ToString(fmt) = 2018/11/08 14:15:23
DateTimeOffset.Now.ToString(fmt) = 2018/11/08 14:15:23
DateTimeOffset.UtcNow.ToString(fmt) = 2018/11/08 14:15:23

[+9]
new DateTimeOffset(DateTime.UtcNow).ToOffset(new TimeSpan(9, 0, 0)).ToString(fmt)
= 2018/11/08 23:15:23

[+8]
new DateTimeOffset(DateTime.UtcNow).ToOffset(new TimeSpan(8, 0, 0)).ToString(fmt)
= 2018/11/08 22:15:23

[0]
new DateTimeOffset(DateTime.UtcNow).ToOffset(new TimeSpan(0, 0, 0)).ToString(fmt)
= 2018/11/08 14:15:23

[-1]
new DateTimeOffset(DateTime.UtcNow).ToOffset(new TimeSpan(-1, 0, 0)).ToString(fmt)
= 2018/11/08 13:15:23