RealPath:
WebPath:
2017/01/15 23:30 (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) = 2017/05/22 15:29:51
DateTime.UtcNow.ToString(fmt) = 2017/05/22 15:29:51
DateTimeOffset.Now.ToString(fmt) = 2017/05/22 15:29:51
DateTimeOffset.UtcNow.ToString(fmt) = 2017/05/22 15:29:51

[+9]
new DateTimeOffset(DateTime.UtcNow).ToOffset(new TimeSpan(9, 0, 0)).ToString(fmt)
= 2017/05/23 00:29:51

[+8]
new DateTimeOffset(DateTime.UtcNow).ToOffset(new TimeSpan(8, 0, 0)).ToString(fmt)
= 2017/05/22 23:29:51

[0]
new DateTimeOffset(DateTime.UtcNow).ToOffset(new TimeSpan(0, 0, 0)).ToString(fmt)
= 2017/05/22 15:29:51

[-1]
new DateTimeOffset(DateTime.UtcNow).ToOffset(new TimeSpan(-1, 0, 0)).ToString(fmt)
= 2017/05/22 14:29:51