2013-11-14 5 views
1

내 데이터베이스의 날짜 값은 GMT 시간대에 int 형식으로 저장되어 있습니다. 현지 시간대로 날짜를 변환하려고하는데 날짜가 지난 날짜 일 때 문제가 발생합니다. 예를 들어 나의 경우 12 월 1 일 오프셋이 -5이고 2010 년 6 월 15 일이 -4 일 예정입니다. 일광 절약에. 저는 현재 EST에 있습니다.GET UTC 지난 날짜의 날짜

그래서 이전 날짜의 UTC 날짜가 -4 또는 -5가 해당 날짜의 오프셋 일지 여부를 판단 할 수 있어야합니다.

SELECT Test_Number, 
Last_Test_Date, dateAdd(hour, 
     datediff(hour, GETUTCDATE(), getdate()), --UTC offset 
     dateadd(second, Last_Test_Date, '1/1/1970 12:00 AM')) 
FROM TestTable 

심지어 가능할 지 확실하지 않습니다. 어떤 견해?

+1

캘린더 테이블을 사용하십시오. 오늘의 오프셋을 사용하여 오프셋을 계산할 수는 없습니다. 과거에. 특히 매년 날짜가 다르므로 실제 규칙도 변경됩니다. 10 년 전 DST가 끝난 시점의 오프셋은 작년과 다릅니다. –

+0

이 문제를 심각하게 생각하면 Windows 런타임 코드를 사용하지 마십시오. 이전 버전은 시간대 당 UTC 시간대의 단일 세트 만 지원했지만, 최신 버전에서는 2 가지 방법 만 지원합니다. –

답변

1

실제로 데이터베이스에 저장된 UTC 시간을 올바른 오프셋 (-5 또는 -4)으로 현지 날짜/시간으로 변환하려고하는 것처럼 들립니다.

SQL Server에서이 작업을 수행하는 좋은 방법은 없습니다.적어도, 아직 없습니다.

제가 제공 할 수있는 최선의 조언은 데이터베이스에서 변환을 수행하지 않는 것입니다. 대신 UTC 값을 그대로 응용 프로그램 코드로 전달하고 거기에서 변환하십시오.

예를 들어 응용 프로그램이 .NET으로 작성된 경우 TimeZoneInfo 또는 Noda Time을 사용하여 원하는 모든 시간대의 변환을 처리 할 수 ​​있습니다. 다른 것을 사용하는 경우 알려 주시면 질문을 업데이트하겠습니다.

+0

감사합니다. Matt, SSRS를 사용 중입니다. 날짜 및 UTC 시간을 동적으로 처리 할 수있는 코드가 있는지 여부는 확실하지 않습니다. – Nanu