簡體   English   中英

帶有UTC日期的.NET的DateTime.ToString(“ R”)中的錯誤?

[英]Bug in .NET's DateTime.ToString(“R”) with UTC dates?

我的總部位於英國(目前是格林尼治標准時間+1)。

如果我運行此命令:

> DateTime.UtcNow.ToString("R")  // Or...
> DateTime.Now.ToUniversalTime().ToString("R")
"Mon, 06 Oct 2014 10:20:00 GMT"

正確答案。
如果我現在以相同的方式運行,而沒有UTC DateTime轉換:

> DateTime.Now.ToString("R")
"Mon, 06 Oct 2014 11:20:00 GMT"

打印的時間正確,但是時區錯誤。 我期望代替:

"Mon, 06 Oct 2014 11:20:00"  // Or..
"Mon, 06 Oct 2014 11:20:00 BST"

問題: 這是設計使然嗎? 我可以獲得與“ R”格式相同的輸出,但帶有正確的時區指示器嗎?

絕對不是錯誤,而是記錄的行為:

定制格式字符串為"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'" 使用此標准格式說明符時,格式化或解析操作始終使用不變的區域性。

...

盡管RFC 1123標准將時間表示為協調世界時(UTC),但是格式化操作不會修改正在格式化的DateTime對象的值。 因此,在執行格式化操作之前,必須通過調用DateTime.ToUniversalTime方法將DateTime值轉換為UTC。 相反, DateTimeOffset值自動執行此轉換。 無需在格式化操作之前調用DateTimeOffset.ToUniversalTime方法。

正如我在對該問題的評論中所指出的那樣,假設您在提出問題之前不久就運行了代碼:11:20 GMT尚未發生,那么10:20 GMT是正確的。

因此,基本上,當您按照文檔中的指導進行操作並調用ToUniversalTime ,它會做正確的事情。 如果您不這樣做,它會產生誤導性的價值-不幸的是,但這是DateTime IMO損壞的設計的一部分。

您應該考慮至少使用DateTimeOffset ,或者可能使用我的Noda Time項目。

暫無
暫無

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

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