시간대와 일광 절약 시간을 고려하여 현지 시간으로 향후 작업을 올바르게 예약하는 것은 매우 복잡한 주제입니다. 스택 오버플로에 대한 프로그래밍 관점에서 여기 와 여기 에 대해 작성했습니다 .
비 프로그래밍 관점에서 요약하겠습니다.
UTC가 아닌 현지 시간으로 반복 패턴을 정의하십시오 . 예를 들어 매일 오전 8시에 알람이 울리도록 매일 알람 시계를 설정 한 경우 일광 절약 시간제 전환 후 한 시간 일찍 또는 한 시간 늦게 일어나지 않습니다. 미국 태평양 시간대에있는 경우 UTC로 오후 4 시로 예약 할 수 없습니다. 전환 후 현지 시간으로 오전 8시 (UTC)로 오후 3시 (UTC)로 전환해야하기 때문입니다.
"현지"시간이 나타내는 시간대를 정의하십시오. 서버의 로컬 시간대가 최종 사용자에게 중요한 시간대라고 가정하지 마십시오.
이벤트를 시작하려는 각 발생에 대해 현지 시간을 UTC 날짜 및 시간으로 투영 하십시오.
거의 즉시 다음에 발생할 때이 작업을 수행하므로 UTC 시계를 사용하여 실제 실행 시간을 결정할 수 있습니다.
에서 어떤 경우에, 당신은 또한 향후 5 명 발생, 또는 내년에 대한 모든 항목과 다음 몇 가지 (또는 많은) 인스턴스를 투사 할 수 있습니다. (이 부분은 응용 프로그램의 요구 사항에 따라 매우 다릅니다.)
일광 절약 시간제 전환 시 발생하는 상황에 대해 수행 할 작업에 대한 전략 (고정 또는 구성 가능)을 준비하십시오 .
"스프링 포워드"전환의 경우 발생이 없을 수있는 현지 시간이 누락되는 간격이 있습니다. 예를 들어 미국 태평양 표준시에서는 현지 시간으로 오전 2시에 실행되도록 예약 된 일일 작업이 2014 년 3 월 9 일에 존재하지 않습니다. 대부분의 경우 절약 시간 (일반적으로 1 시간)만큼 해당 시간을 진행하려고합니다. ), 그 날 오전 3시에 실행되지만 다음 인스턴스에서는 오전 2시에 다시 실행됩니다. (그러나 다른 전략을 원할 수도 있습니다.)
"폴백"전환의 경우 발생이 두 번 존재할 수있는 중복 된 로컬 시간이 중복 됩니다 . 예를 들어 미국 태평양 표준시에서 오전 1시에 실행되도록 예약 된 일일 작업은 2014 년 11 월 2 일에 실행 가능한 시간이 두 번입니다. 대부분의 경우 첫 번째 발생시 1 을 실행하려고합니다. : 00 AM PDT이고 같은 날짜의 다음 오전 1시 PST를 건너 뜁니다. (그러나 다시, 두 번째 발생 또는 두 가지 모두에서 실행하는 것과 같은 다른 전략을 원할 수 있습니다 . YMMV)
시간대 데이터를 업데이트해야하는 경우 UTC 시간을 모두 다시 계산할 준비를하십시오 . IANA / 올슨 TZDB의 여러 업데이트 끈다 매년 때문에 시간대 오프셋 및 일광 절약 시간 규칙에 대한 세계의 변화 그들의 마음의 모든 시간의 정부. 향후 특정 기간 동안 규칙이 변경되지 않는다고 가정 할 수 없습니다 .
시간대 데이터 릴리스 발표 를 구독 하고이를 시스템 및 / 또는 응용 프로그램에 적용하는 프로세스를 갖추십시오.
전통적인 회사 환경에서는 이것이 IT 운영 직원의 책임이어야합니다.
환경에 따라 tzdata
Linux 패키지 업데이트, Java JRE 또는 tzupdater 또는 기타 여러 채널 을 통해이 데이터를 가져올 수 있습니다 . 때로는 환경에 따라 다르며 때로는 PHP 용 timezonedb PECL 패키지 와 같은 다른 프로그래밍 플랫폼마다 다릅니다 .
Microsoft는 자체 시간대 데이터를 가지고 있습니다. Windows의 경우 TimeZoneInfo
.NET에서 사용 하는 경우 (예 :)이 데이터를 사용하고 있습니다. 업데이트는 여기 에서 제공되며 Windows Update를 통해 자동으로 푸시되므로 언제 다시 계산해야하는지 알 수 있도록 업데이트하십시오.
이해가 모두 함께, 거기 이다 아직도 당신이 UTC으로 만 예약 할 시나리오, 그것은을위한 절대 미래의 이벤트. 예 :
Windows 작업 스케줄러
Windows가 반드시 옳은 일을하는 것은 아닙니다. 트리거 정의 방법에주의하십시오.
"시간대에 동기화"라고 표시된 상자를 선택하면 작업이 UTC로만 예약됩니다. (모든 시간은 여전히 현지 시간으로 표시되지만 UTC 로 저장 됩니다.) 이것은 이전에 "절대"이벤트라고 불렀습니다.
해당 상자를 선택하지 않으면 코드가 실행되는 컴퓨터의 현지 시간대가 사용됩니다. 시간대를 지정할 수있는 옵션을 제공하지 않으므로 IMHO 구현이 좋지 않습니다.
나는 그것이 DST 행동인지 정확히 확신하지 못하지만 실험하고 다시 그에게 돌아갈 것입니다. 아마도 위에서 설명한 것을 수행하지만 반드시 그런 것은 아닙니다.
SQL 에이전트
SQL 에이전트 스케줄러는 로컬 서버 시간 만 사용할 수 있다는 점에서 더 나쁩니다 . 또한 시간대를 지정할 수 없으며 UTC도 지정할 수 없습니다.
그것은 된 요청 하지만 허용되지 않습니다.