문제

표준에서 UTC 로의 전환은 어떻게됩니까? DateTime 형식 작업?

보다 구체적으로, 내가 만든 경우 DateTime 한 시간대에 물체를 한 다음 다른 시간대로 전환하고 실행합니다. ToUniversalTime() 그것에, 전환이 올바르게 이루어졌으며 시간이 여전히 정확하게 표현된다는 것을 어떻게 알 수 있습니까?

도움이 되었습니까?

해결책

a에 부착 된 암시적인 시간대가 없습니다 DateTime 물체. 당신이 달리면 ToUniversalTime() 그것에, 그것은 코드가 실행중인 컨텍스트의 시간대를 사용합니다.

예를 들어, 내가 만든 경우 DateTime 1970 년 1 월 1 일의 시대에서 나에게 똑같이 DateTime 내가 세상 어디에 있든 상관 없습니다.

내가 달리면 ToUniversalTime() 그리니치에서 코드를 실행할 때 동시에 얻을 수 있습니다. 밴쿠버에 사는 동안 그렇게하면 오프셋이됩니다. DateTime -8 시간의 대상.

그렇기 때문에 모든 종류의 날짜 변환 또는 현지화를 수행 해야하는 경우 데이터베이스에 시간 관련 정보를 UTC 시간으로 저장하는 것이 중요합니다. 코드베이스가 다른 시간대에 서버 시설로 이동했는지 고려하십시오.)

편집 : Joel의 답변에서 참고 - DateTime 기본적으로 객체는 다음과 같이 입력됩니다 DateTimeKind.Local. 날짜를 구문 분석하고로 설정하면 DateTimeKind.Utc, 그 다음에 ToUniversalTime() 변환을 수행하지 않습니다.

그리고 여기에 관한 기사가 있습니다 "날짜 시간과 함께 코딩하는 모범 사례", 및 기사에 관한 기사 dateTimes를 .NET으로 변환합니다.

다른 팁

먼저, 그것은 KindDateTime 이미 UTC 인 것으로 알려져 있습니다. 그렇다면 동일한 값을 반환합니다.

그렇지 않으면 현지 시간으로 간주됩니다.이 회사는 작동하는 컴퓨터에 로컬이며, 특히 일부 사유지가 처음에는 초기화 될 때 컴퓨터가 사용했던 시간대에서. 그것은 당신이 시간대를 변경한다면 의미합니다 ~ 후에 귀하의 응용 프로그램이 시작되었으며 여전히 이전 신청을 사용할 가능성이 높습니다.

시간대에는 현지 시간을 UTC 시간 또는 그 반대로 변환하기에 충분한 정보가 포함되어 있지만 모호하거나 유효하지 않은 시간이 있습니다. (지역 시간이 두 번 발생하고 일광 절약 시간으로 인해 발생하지 않는 현지 시간이 있습니다.)이 사례를 처리하는 규칙은 다음과 같습니다. 문서:

날짜 및 시간 인스턴스 값이 모호한 시간 인 경우이 방법은 표준 시간이라고 가정합니다. (모호한 시간은 현지 시간대의 표준 시간 또는 일광 절약 시간에 매핑 할 수있는 시간입니다) 날짜 및 시간 인스턴스 값이 잘못된 시간이면이 방법은 단순히 현지 시간대에서 현지 시간을 빼냅니다. UTC 오프셋 UTC를 반환합니다. (유효하지 않은 시간은 일광 절약 시간 조정 규칙을 적용하여 존재하지 않는 시간입니다.)

반환 된 값은 a KindDateTimeKind.Utc, 당신이 전화하면 ToUniveralTime 이에 따라 오프셋을 다시 적용하지 않습니다. (이것은 .NET 1.1에 비해 크게 개선되었습니다!)

비 국소 시간대를 원한다면 사용해야합니다. TimeZoneInfo .NET 3.5에 도입되었습니다 (이전 버전에 대한 해킹 솔루션이 있지만 좋지는 않습니다). 시간이 지남에 따라 사용하려면 사용을 고려해야합니다. DateTimeOffset .NET 2.0SP1, .NET3.0SP1 및 .NET 3.5에 도입되었습니다. 그러나 여전히 실제 시간대와 관련된 시간대가 없습니다. UTC의 오프셋 만 있습니다. 즉, 1 시간 후에 현지 시간이 무엇인지 알지 못합니다. 예를 들어 DST 규칙은 특정 순간에 동일한 오프셋을 사용하는 시간 영역마다 다를 수 있습니다. TimeZoneInfo 역사적 및 미래 규칙을 고려하도록 설계되었습니다. TimeZone 다소 단순합니다.

기본적으로 .NET 3.5의 지원은 그보다 훨씬 좋지만 여전히 적절한 달력 산술에 원하는 것을 남깁니다. 누구든지 멋진 포팅 조다 시간 .NET에? ;)

@womp가 말했다, DateTime의 종류를 확인하여 그것이 할 수 있는지 확인하는 추가 이미 UTC 날짜가 되십시오.

DateTime.touniversaltime은 로컬 타임 존의 시간대 오프셋을 제거하여 DateTime을 UTC로 정상화합니다. 그런 다음 다른 시간대에 정규화 된 값에서 DateTime.tolocalTime을 사용하면 해당 시간대의 시간대 오프셋이 해당 시간대의 올바른 표현을 위해 정규화 된 값에 추가됩니다.

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