2012-09-07 1 views
1

Windows에서는 GetTimeZoneInformation을 호출하여 쉽게 UTC 변환을 수행 할 수 있습니다. 결과로 얻은 구조체에는 두 개의 서로 다른 바이어스 값 (표준 시간과 DST 중 하나)과 BiasCode (현재 어느 것이 현재 있는지)이 있습니다. 현재의 순간 만 신경 쓰면 괜찮습니다.미래의 포인트에 대해 UTC 시간 변환을 수행 할 수있는 방법이 있습니까?

하지만 향후 이벤트에 대한 데이터를 검색하기 위해 사용자가 호출하는 API가 있습니다. 데이터는 현지 시간으로 데이터베이스에 저장되고 사용자는 UTC로이를 원하기 때문에 변환을 실행하면 모든 것이 잘됩니다 ... 몇 주 안에 시간이 다가올 것입니다. 그리고 오늘의 편견으로 시간 변화의 반대편에있는 사건들을보고하면, 그들은 한 시간 쯤 떨어져있을 것입니다.

내가 그것을 날짜와 시간 다음 날 그 시간에 올바른 될 것입니다 제공하여 BiasCode, 대신 현재를 통과하는 것을 제외 GetTimeZoneInformation처럼 작동 내가 호출 할 수있는 일이 있습니까 ? (그리고 그래, 나는 규칙이 매년 변경 알고 내가 미래에 몇 주 이상으로 보이는 것을 찾는 게 아니에요..)

+0

가 나는 것을 알고 더 Win32 함수가 정확하게 당신이 원하는하지 않습니다, 그러나 위의 미래 년의 날짜 (Vista 및 현재 년 GetTimeZoneInformation을 사용하여 자신을 쓰기 어려운, 또는 GetTimeZoneInformationForYear 안). –

+0

현지 시간에서 UTC 시간으로 변환하는 것은 모호 할 수 있습니다. 이상적으로는 UTC로 저장하고 표시를 위해 변환해야합니다. – Deanna

답변

2

SystemTimeToTzSpecificLocalTime -

변환 - 나 MSDN 인용하자 UTC (협정 세계시)로 지정된 시간을 해당하는 현지 시간 인 으로 지정합니다.

당신은 모두 과거와 미래의 입력 UTC 시간을 제공하고 시간에 특정 순간에 고려 DST 설정에 대한 모든 세부 사항을 복용 현지 시간 변환을 얻을 수 있습니다.

TzSpecificLocalTimeToSystemTime은 역 변환을 수행하는 트윈 기능입니다.

나를 위해 더욱 중요한 문제는 동일한 지역에서도 DST 설정이 수시로 바뀌고 전환이 매년 다를 수 있다는 것입니다. 미래). 이 API는 시간이 지남에 따라 DST 규칙 변경 내역을 추적하여이를 처리한다고 가정합니다.

UPD. 가정은 정확하고 MSDN는 것을 언급 :

  • 시간대는 신구 년 동안 오프셋 다른 UTC를 사용합니다.
  • 변환 할 UTC 시간과 계산 된 현지 시간은 서로 다른 연도입니다.
관련 문제