2016-09-23 4 views
0

저는 새로운 SQL Developer 사용자이며 날짜 변경에 많은 시간을 할애하지 않았습니다. 나는 실제 시간보다 한 시간 앞선 정보를 보여주는 질의를 가지고있다. 다른 테이블 또는 CST일광 절약 시간제가

년의 시간에 따라 달라집니다 CDT가있는 시스템 날짜를 고려하면서 데이터에서 가져온되는 테이블 중 하나가 항상 CST을 날짜를 가지고 있기 때문이다 I 테이블에 가입하면 실제 시간보다 1 시간 앞당겨 시작합니다. 이를 보완하기 위해 DELIVERY_TIME 대신 DELIVERY_TIME+1/24을 사용해야하지만 코드를 일년에 두 번 변경해야합니다.

어떤 해결책이 있습니까?

+4

모든 것을 utc에 저장하고 utc를 사용하여 모든 비교/계산을 수행하십시오. 표시 목적으로 만 "로컬"TZ로 변환합니다. –

답변

1

당신은 얻을 수있는 보편적 인 모든 가능한 데이터베이스 값을 UTC로 저장하고 싶습니다. 이러한 설정은 대개 데이터를 보는 개인에 따라 매우 다양하기 때문에 응용 프로그램 계층에서 로컬 시간으로 렌더링 할 수 있습니다.

매일 오후 6시와 같이 특정 배달 시간이 있고 그 시간이 UTC로 언제 떨어져 있는지 알고 싶으면 시간을 작성하고 UTC로 변환 할 수 있습니다. 대부분의 시간대는 현지 시간으로 1 시간 전후로 DST를 관찰하지만 UTC가 아닙니다.

보통 데이터베이스에는 임의의 시점을 구성 할 수있는 MAKEDATE() 또는 MAKETIME()과 같은 기능이 있습니다. 시간대를 사용하여 원하는 표준 시간대를 만든 다음 UTC로 전환하여 "고정"상태로 유지하십시오.

"일년에 두 번 변경해야합니다"코드를 가지고있을 때 이 변경되지 않고이 변경되고 혼돈이 발생하는 코드가 있습니다. 이러지 마. 당신은 실패에 대한 자신을 설정하는 것뿐입니다.

참고로 SQL에서이 모든 작업을 수행하는 것은 운영 체제에 많이 의존하지 않는 한 데이터베이스가 항상 최신 표준 시간대 정보를 가지고 있지 않기 때문에 매우 혼란 스러울 수 있습니다. 귀하의 운영 체제는 일반적으로 더 잘 갖추어져 있으며, 변경된 사항이 it did in 2005 일 경우 패치가 적용됩니다. 심지어 패치와 패치가 혼합 된 시스템이 지속적으로 충돌 한 이후로는 완전히 엉망이었습니다.

+0

UTC로 변환해도 UTC에 대한 CST의 값은 UTC와 다른 값을 갖게됩니다. 그리고 결국 그것은 똑같은 일이 될 것입니다. 테이블에 CST 만있는 경우 SQL에서 일광 보정을 구현하는 방법이 있습니까? –

+0

이상적으로 CST 시간을 제거하고 필요에 따라 CDT 또는 CST 또는 CST/CDT로 렌더링 할 수 있도록 UTC로 변환하십시오. 이러한 시대 가치를 표현하는 많은 방법이 있습니다. UTC는 시간에 따라 앞뒤로 뛰어 오르지 않는다는 것을 보장하는 유일한 방법입니다. – tadman

관련 문제