2010-02-12 29 views
3

如果我得到DateTime對象的RFC-1123格式化日期,它會給出當前本地時間,但給出的時區爲GMT(這是不準確的)。
DateTime.Now.ToString("r");
回報
Fri, 12 Feb 2010 16:23:03 GMTDateTime到RFC-1123給出不準確的時區

在下午4:23,但我的時區爲UTC + 10(另外,我們目前正在觀察夏令時)。現在

,我可以通過轉換爲UTC先得到一個返回值是「正確」:
DateTime.UtcNow.ToString("r");
回報
Fri, 12 Feb 2010 05:23:03 GMT

然而,理想情況下,我想找到正確的時區,這我想會
Fri, 12 Feb 2010 16:23:03 +1100

傳遞在當前CultureInfo不會改變任何東西。我可以通過TimeZoneInfo.Local.GetUtcOffset(...)得到一個UTC偏移量,並從中設置一個時區字符串,但是刪除GMT位並替換它看起來很不合時宜。

有沒有辦法強制它包含正確的時區?

回答

4

.NET實現總是將結果表示爲GMT,而不考慮實際日期的時間偏移。

通過使用DateTime.Now.ToString("r");您實質上是說String.Format("ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", DateTime.Now);,它是.NET RFC1123格式字符串,如MSDN-The RFC1123 ("R", "r") Format Specifier上所示。

要獲得您所需要的行爲,你應該使用String.Format,並用時間偏移符替換符的固定 'GMT' 部分:

4

你可以做DateTime.UtcNow.ToString ("R"),你仍然會得到GMT時區,但時間是然後正確地抵消。

+1

這是正確的,但是,您仍然必須更換時區。這是我用過的東西,知道我的服務器是EST。 date.ToLocalTime()。ToString(「R」)。替換(「GMT」,「EST」) 如果您希望修改Web請求中的日期標題,可以使用它。我在dev&prod中使用它,它工作。 MethodInfo priMethod = client.Headers.GetType()。GetMethod(「AddWithoutValidate」,BindingFlags.Instance | BindingFlags.NonPublic); priMethod.Invoke(client.Headers,new object [] {「Date」,); – 2015-12-13 16:59:40