![](/img/trans.png)
[英]Bug in DateTime.ToString(“T”) and DateTime.ToString(“G”)?
[英]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.