簡體   English   中英

DateTime對象的奇怪行為

[英]Strange behavior from DateTime objects

我執行以下操作:

var now = DateTime.Now;
var utc = DateTime.UtcNow;
var timeSpan = now - utc;

Console.WriteLine("Now is: " + now.ToString("yyyy-MM-dd HH:mm:ss:ms") + " utc is: " + utc.ToString("yyyy-MM-dd HH:mm:ss:ms") + " timeSpan: " +
                    timeSpan.TotalMinutes);

Console.ReadKey();

它給出以下結果: 安慰 如果我將timespan.hours(實際上是我使用的那一小時)記為1? 應該是2我在哪里做錯了?

兩次獲取之間有一些時間間隔(系統甚至可以在這兩個調用之間切換進程):

 var now = DateTime.Now;
 // some time passes here
 var utc = DateTime.UtcNow;

這就是為什么兩個值之間的時間少於2小時的原因。 您應該只獲取一次時間,然后轉換為本地時間:

 var utc = DateTime.UtcNow;
 var now = utc.ToLocalTime();
 // timeSpan: 120

或使用TimeZoneInfo.ToUniversalTime將本地時間轉換為UTC時間:

 var now = DateTime.Now;
 var utc = TimeZone.CurrentTimeZone.ToUniversalTime(now);

原因很簡單:您的計算會花費兩次時間來引入錯誤。 最終結果略有錯誤,但撥打電話花費了時間。

解決方案比較簡單。

  Console.WriteLine(TimeZoneInfo.Local.BaseUtcOffset.Hours);
  Console.WriteLine(TimeZoneInfo.Local.GetUtcOffset(DateTime.Now).Hours);

當您真正想要的是時區信息時,無需獲取或轉換時間。 第一行獲得“正常”本地時間偏移; 如果您的時區受夏時制或其他調整的影響,第二個將獲取“現在”的偏移量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM