[英]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.