2019-07-21 15:43

C# DateTimeOffset Parse Patch

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

  1. //TimeZoneInfo.GetSystemTimeZones().Dump(); 
  2.  
  3. /* (UTC+02:00) 開羅 */ 
  4. var zone = TimeZoneInfo.FindSystemTimeZoneById("Egypt Standard Time"); 
  5. zone.Dump(); 
  6.  
  7. var date = DateTimeOffset.Parse("2019-07-01 15:00:00"); 
  8. date.Dump(); /* 2019/7/1 下午 03:00:00 +08:00 */ 
  9.  
  10. var diff = date.Offset - zone.BaseUtcOffset; 
  11. diff.Dump(); /* 06:00:00 */ 
  12.  
  13. date = date.Add(diff); 
  14. date.Dump(); /* 2019/7/1 下午 09:00:00 +08:00 */ 
  15.  
  16. date = TimeZoneInfo.ConvertTime(date, zone); 
  17. date.Dump(); /* 2019/7/1 下午 03:00:00 +02:00 */ 

0 回應: