문제

내가 알기로는 차이 운영하는 DateTime 유형을 고려한 도약 년:그래서

new DateTime(2008, 3, 1) - new DateTime(2008, 2, 1) // should return 29 days
new DateTime(2009, 3, 1) - new DateTime(2009, 2, 1) // should return 28 days

하지만 무엇에 대해 일광 절약?

도움이 되었습니까?

해결책

나는 그것이 될 것이라고 생각하지 않습니다. 문서 단순히 DateTime은 12:00:00 Midnight, 1 월 1 일, 0001 년 이후 진드기 수로 저장된다고 말하지만, 실제로 자정이 실제로 어떤 시간대에 있는지는 말하지 않습니다. 내부적으로 UTC에서 그들은 그렇게 말할 것입니다.

그래도 쉽게 이걸 얻을 수 있습니다 : 그냥 :

var difference = Dt1.ToUniversalTime() - Dt2. ToUniversalTime()

UTC 로의 전환은 일광 절약을 고려할 것입니다.

다른 팁

.NET 처리하지 않 일광 절약 시간을 정확하게도,그것은 답변을 원합니다.당신 고 싶 잘못된 답변이 있습니다.

짧은 버전을 사용:

  • 어떻게 할 수 있습니다.NET 알고 있는 1977 년에 일광 절약 시간에 효력이 전체 올해로 인해 에너지 위기인가?

  • 어떻게 할 수 있습니다.NET 알 일광 절약 규칙에서 이스라엘을 때,규칙기로 결정했 년에 의하여 국회?

  • 는 방법입니다.NET 는 것을 알고 미국에서 실행 DST 올해 라운드 차 세계 대전 동안,그리고 1945 년부터 1966 년 DST 규칙 다양한 지역과 규칙은 여전히 변화하는 지역 별로 차이가 있습니다.

.순도 경며,현재 일광 절약 규칙,심지 않은 경우에,또는,적용됩니다.결과는 당신이 얻을 답변하는 동안은 당신이 원하는 무슨 생각은 잘못되었습니다.

레이몬드 Chen의 블로그 항목에 왜 일광 절약 시간 nonintuitive:

하지 않는 이유가 무엇(win32)시간대 변환 기능을 사용하여 시간 영역에 적합한 올해의 시간?

...

Win32 려고 시도하지 않는 시간 영역 규정에 효력 다른 시간입니다.그래서 Win32 말한다,"화요일 월 17 일,2002 년 8:45:38 오전".

참고: 태평양 시간입니다.도 비록 17 일 동안 태평양 일광 시간 Win32 시간을 표시합니다 표준으로 시간을 무엇 때문에 시간 지금.

.NET 말한다,"만,경우에는 규칙에서 효과를 지도에 적용 October17,2003,다음이 될 것입 일광 절약 시간"이렇게 표시 "목요일,October17,2003 년 9:45AM PDT"일광 시간입니다.

그렇게 답을 얻은 잘못입니다.그러나 때문에 당신이 기대 잘못된 응답,그것은 당신이 무엇을 얻을 수 있습니다.

일광 절약 시간은 일반 12 시간보다 구체적이며 어느 국가가 사용했는지보다 구체적입니다.

다른 국가 또는 국가 그룹은 DST가 발생할 때 다른 날짜를 사용합니다.

그것은 약간의 고통이 실제로 그것을하지 않는 국가 나 국가의 일부를 언급하지는 않습니다.

예를 들어 Queensland, Au Doenst는 DST가 나머지 나라의 영감을주었습니다.

그것이하지 않는 경우, 그것이 적어도 문화적으로 9AT를 사용하여 그것을 할 수 없을 경우에 나는 놀라지 않을 것입니다).

그것은 그렇지 않고 실제로는 할 수 없습니다, DateTime을 구성하기 위해 UTC를 사용하도록 강요하지 않거나 현지 시간 값으로 Datetime을 구성 할 때 DST가 유효했는지 여부를 지정할 수 있다는 사실을 기반으로합니다. 또한 모드 (LT 또는 UTC)가 "지정되지 않은"상태로 만들 수 있으며, 이는 단지 아시 닌입니다.

현지 시간 값에서 DateTime 값을 구성 할 수있게함으로써, 지역 시간이 반복되는 미국에서 11 월 2 일 오전 1시에서 오전 2시 사이에 모호한 DateTime 값 (현지 시간으로 지정됨)을 구축 할 수 있습니다. ) 그리고 결정적으로 UTC로 다시 변환 할 수 없습니다. 생성자가 DST가 주어진 현지 시간에 영향을 미치는지 여부를 지정하기위한 매개 변수를 제공하지 않는 한.

그러한 매개 변수를 제공하지 않기 때문에 DateTime 클래스의 설계는 불완전하고 결함이 있으며 현지 시간을 올바르게 지정하는 데 필요한 모든 매개 변수를 고려하지 못했습니다.

그것이 그들이 DateTimeOffset 클래스를 만들었던 이유라고 생각합니다. 만약 당신이 왜 그런 겉보기에 중복 된 클래스가 존재하는지 혼란 스러웠다면 ... 그 이유입니다.

결과적으로 DateTimemode.utc로 설정되지 않은 DateTime 인스턴스를 사용하여 어떤 종류의 계산도 수행해서는 안됩니다. UTC 만 사용하십시오. 실제로 LT로 또는로 변환 할 수는 없습니다. 두 가지 방법 모두 두 가지 버그로 파열되기 때문입니다. 1. LT에서 UTC로가는 것은 LT에서 DST가 그 모호한 시간 동안 유효했는지 여부를 지정할 수 없기 때문에 파열됩니다. 아, 그것은 또한 시계가 앞서 나갈 때 건너 뛰는 시간과 같이 기본적으로 불가능한 로컬 시간을 지정할 수 있습니다. 2. 과거에 UTC 값을 현지 시간으로 변환 할 때, Windows는 현재 유효한 지 여부에 따라 DST를 오프셋하여 주어진 시간이 심각한 시간이되는 데 따른 것입니다. 물론, 파일 이름으로 작성, 저장 또는 사용 된 수정 시간이 Windows 탐색기에서 1 시간이 걸리는 수정 시간 이이 문제를 발견했을 수 있습니다. 아니요, 당신은 미쳤습니다. Windows는 심각한 버그를 가지고 있습니다. 그들은 DOS 릴리스와 최신 .NET 프레임 워크 (~ 2 년) 사이의 어딘가에 수정할 시간을 찾지 못했습니다! 물론,이 버그는 CVS 시스템과 수정 시간을 추적하는 모든 것에 영향을 미칩니다. 지방 파일 시스템은 시간을 로컬 타임으로 저장하므로 완전히 망가졌습니다.

테스트하고보세요!

DST 사건에 대해 윤년과 마찬가지로 테스트를 작성하기가 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top