2010-02-12 2 views
3

을 제공하지만, (부정확) GMT와 같은 시간대를 제공합니다.
DateTime.Now.ToString("r");
반환
오후 4시 23분에서 Fri, 12 Feb 2010 16:23:03 GMT날짜 시간 내가 DateTime 개체의 RFC-1123 형식의 날짜, 그것은 현재 로컬 시간을 제공받을 경우 부정확 한 시간대를

,하지만 내 시간대는 UTC + 10 (더하기, 우리는 현재 일광 절약 시간을 관찰하고).

지금, 나는 처음 UTC로 변환하여 "올바른"의 반환 값을 얻을 수 있습니다 :
DateTime.UtcNow.ToString("r");
반환
그러나 Fri, 12 Feb 2010 05:23:03 GMT

, 이상적으로, 내가 올바른 시간대를 얻을하고 싶은 난 아무것도 변경되지 않습니다 현재 CultureInfo를 건네
Fri, 12 Feb 2010 16:23:03 +1100

것 같아요. 나는 TimeZoneInfo.Local.GetUtcOffset (...)와 오프셋 UTC를받을 수 있도록에서 시간대 문자열을 포맷하지만 GMT 비트를 제거하고 교체하는 것은 gratutiously 지저분한 것 같습니다 수 있습니다.

의 올바른 시간대를 포함하도록 강제 할 수있는 방법이 있습니까? 그것은 관계없이 실제 날짜의 오프셋 (offset)의 시간, GMT 것처럼

답변

4

는 .NET 구현은 항상 결과를 표현한다.

DateTime.Now.ToString("r");을 사용하면 MSDN - The RFC1123 ("R", "r") Format Specifier에 표시된대로 String.Format("ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", DateTime.Now);이라는 .NET RFC1123 형식 문자열을 사용해야합니다.

필요한 동작을 얻으려면, 당신은 아마 String.Format 사용하고, 시간 오프셋 지정자와 지정자의 고정 'GMT'섹션을 교체해야합니다 :

4

당신은 단지 DateTime.UtcNow.ToString ("R")을 할 수있는, 당신은 여전히 ​​GMT 시간대를 얻을 것이다 그러나 시간이다 올바르게 오프셋.

+1

이 내용은 정확하지만 여전히 시간대를 교체해야합니다. 이것은 내가 사용하는 서버가 EST라고 알고 사용했습니다. 당신은 웹 요청의 날짜 헤더를 수정하고자하는 경우 date.ToLocalTime(). ToString ("R")이. ("GMT", "EST") 교체, 당신은이를 사용할 수 있습니다. dev & prod에서 이것을 사용하고 있습니다. MethodInfo priMethod = client.Headers.GetType(). GetMethod ("AddWithoutValidate", BindingFlags.Instance | BindingFlags.NonPublic); priMethod.Invoke (client.Headers, new object [] ("날짜", "위의 변환")); –

관련 문제