2014-06-23 3 views
0

저를 이해하고 도와주세요.CURRENT_UTC_TIME 및 시간대 문제

내 SQL Server는 (남아프리카 공화국 (GMT + 2)

내 응용 프로그램이

내 고객 (모바일) 브라질 지금 남아프리카 공화국에 있던 미국 (GMT-6)에에 GMT-입니다 4).

테이블에있는 레코드의 LastUpdateTime은 오전 10:25이고 클라이언트 시간은 4:25입니다. 이 시간에 서버는 2:25 (또는 그와 비슷한 것)을 표시합니다.

나는 지금 삽입을 위해 GETUTCDATE 함수를 사용할 수 있습니다. 그러나 내 질문은 다음과 같습니다.

  1. 이전 레코드 'LastUpdateTime을 어떻게 자동으로 UTC 날짜로 변환합니까?

  2. 이 변환은 좋은 생각입니까 아니면 응용 프로그램에서 수행 할 수 있습니까?

  3. web.config 파일 appSetting 섹션에 서버 시간대 구성을 허용하려면 어떻게해야합니까? (서버 시간대가 변경 될 때마다 언급해야 함)?

+0

[UNIX 타임 스탬프] (http://skinn3r.wordpress.com/2009/01/26/t-sql-datetime-to-unix-timestamp/comment-page-1/)로 저장하는 것이 좋지 않습니까? –

+0

물론 디폴트 값은'GETDATE' 대신에'GETUTCDATE'이어야합니다. 그럴 수 없습니까? – Bellash

+0

@EmilioGort - 가능할 수 있습니다. 왜 그럴까? 'GETUTCDATE'는'datetime' 타입을 반환합니다. 확실히 색인을 생성 할 수 있습니다. –

답변

3

LastUpdateTime 같은 값을 저장하도록 허용되는 다른 두 가지가 같습니다 datetime 또는 datetime2 필드

  • 에서 UTC의 관점에서

    • 는 A의 로컬 시간적 datetimeoffset 필드

    datetime 필드에 현지 시간을 저장 한 경우 값은입니다. 잠재적으로 모호하다. UTC로 변환하려면 원래 데이터가 캡처 된 방법에 대한 외부 지식이 필요합니다.

    값이 SQL의 GETDATE 문으로 캡처 된 경우 SQL Server의 표준 시간대가 적합합니다. 남아프리카 공화국의 시간은 항상 + 02 UTC입니다 : 00, 그래서 당신은 다음 중 하나를 수행 할 수 있습니다

    • datetimeoffset에 값을 복사, 같은 필드의 값을 유지하고 UTC
    • 또는에 적응하기 위해 두 시간 빼기 OTC 값을 남기고 UTC + 02 : 00 오프셋을 사용합니다.

    그러나 다른 표준 시간대에서 값을 얻은 경우 그 표준 시간대를 알고 있어야합니다. 하나의 오프셋에 많은 시간대가 고정되어 있지 않으므로 일광 절약 시간제 문제가 발생할 수도 있습니다.

    귀하는 신청서가 미국 GMT-6에 있었지만 그 말이 맞지 않습니다. 미국의 중부 표준시는 UTC-06 : 00과 UTC-05 : 00 사이에서 번갈아 나타납니다. 반면 미국의 산지 표준시는 UTC-07 : 00과 UTC-06 : 00 사이에서 번갈아 나타납니다. 해당 시간대를 알고 있어야하며 fall-back daylight saving time transition으로 인해 잠재적 인 중복을 대비해야합니다.

    web.config 파일에 관해서는 SQL Server보다 ASP.Net 질문이 더 많습니다. 그러나 이것을 수행 할 마법 설정이 없다는 것을 알려 드릴 수 있습니다. 애플리케이션에서 DateTimeDateTimeKind.Utc과 올바르게 사용하거나 DateTimeOffset을 사용해야하며 전환을 수행하려면 TimeZoneInfo에 참여해야 할 수 있습니다. 코드를 표시하지 않았고 이는 매우 광범위한 주제이므로 여기에서는 더 나은 조언을 제공하는 것이 불가능합니다.