2019-07-21 15:43

C# DateTimeOffset Parse Patch

DateTimeOffset 在 Parse 時會使用 Local TimeZone,這會與期望的 TimeZone 產生偏差,需要進行差值修補。

//TimeZoneInfo.GetSystemTimeZones().Dump();

/* (UTC+02:00) 開羅 */
var zone = TimeZoneInfo.FindSystemTimeZoneById("Egypt Standard Time");
zone.Dump();

var date = DateTimeOffset.Parse("2019-07-01 15:00:00");
date.Dump(); /* 2019/7/1 下午 03:00:00 +08:00 */

var diff = date.Offset - zone.BaseUtcOffset;
diff.Dump(); /* 06:00:00 */

date = date.Add(diff);
date.Dump(); /* 2019/7/1 下午 09:00:00 +08:00 */

date = TimeZoneInfo.ConvertTime(date, zone);
date.Dump(); /* 2019/7/1 下午 03:00:00 +02:00 */

0 回應: