Daylight Saving Time

일광 절약 시간 설명: DST가 Unix 타임스탬프에 미치는 영향

일광 절약 시간은 봄에 현지 시계를 앞당기고 가을에 되돌립니다. Unix 타임스탬프는 영향을 받지 않지만(항상 UTC를 셈), Unix 시간과 현지 시각 사이의 모든 변환은 일광 절약 시간이 켜져 있는지 알아야 합니다. 이 가이드는 DST가 무엇인지, 어디에 적용되는지, 그것이 만드는 공백·중복 버그, 그리고 올바르게 다루는 법을 다룹니다.

1분으로 보는 DST와 Unix 시간

일광 절약 시간은 봄에 현지 시계를 한 시간 앞당기고 가을에 한 시간 되돌립니다. Unix 타임스탬프는 결코 움직이지 않습니다 — UTC 초를 세며 모든 전환을 곧장 똑딱입니다 — 그래서 DST에 영향을 받지 않습니다. 바뀌는 것은 그에 대해 표시하는 현지 시각입니다. 두 전환이 거의 모든 DST 버그를 일으킵니다. 봄철 앞당김 공백(현지 시각의 한 시간이 결코 일어나지 않음)과 가을철 되돌림 중복(한 시간이 두 번 일어남)입니다. 아래 표는 주요 지역이 언제 전환하는지 보여 줍니다.

지역봄철 전환(앞당김)가을철 전환(되돌림)시계 변화
미국·캐나다3월 둘째 일요일11월 첫째 일요일02:00 → 03:00 현지
유럽 연합3월 마지막 일요일10월 마지막 일요일01:00 UTC, +1시간
영국3월 마지막 일요일10월 마지막 일요일GMT ↔ BST
호주(시행 주)10월 첫째 일요일4월 첫째 일요일남반구 — 반대

일광 절약 시간이란?

일광 절약 시간(DST)은 저녁 햇빛을 늘리기 위해 1년 중 일부 기간 현지 시계를 한 시간 앞당기는 관행입니다. 현재 약 70개국이 시행하며 대부분 온대 위도입니다. 전환은 벽시계 시각의 불연속이지 UTC의 불연속이 아닙니다 — Unix 타임스탬프는 모든 앞당김과 되돌림을 지나 매끄럽게 똑딱입니다.

  • 북반구: 시계는 보통 3월에 앞당기고 10월/11월에 되돌린다
  • 남반구: 시계는 10월에 앞당기고 3월/4월에 되돌린다
  • 열대·적도 지역은 일반적으로 DST를 시행하지 않는다
  • DST는 저녁에 한 시간의 햇빛을 더하지만 일조 총량을 바꾸지는 않는다

DST 전환은 Unix 타임스탬프에 어떻게 영향을 주는가

Unix 타임스탬프는 1970년 UTC 이후 경과한 초의 수이므로 앞으로 건너뛰거나 반복할 수 없습니다. 바뀌는 것은 그 초의 현지 시각 해석입니다. 봄철 앞당김 전환에서 현지 시계는 02:00에서 03:00으로 건너뜁니다 — 02:00부터 02:59까지의 벽시계 시간은 현지에서 결코 일어나지 않습니다. 되돌림에서는 현지 시계의 01:00부터 01:59가 UTC에서 한 시간 간격을 두고 두 번 일어납니다.

  • 어떤 Unix 타임스탬프도 DST로 인해 건너뛰거나 중복되지 않는다
  • 주어진 Unix 타임스탬프는 오프셋을 포함해 특정 현지 시각에 대응한다(PDT vs PST, BST vs GMT 등)
  • 주어진 현지 시각은 0개(DST 공백) 또는 2개(DST 중복)의 Unix 타임스탬프에 대응할 수 있다
  • IANA 이름(America/Los_Angeles)을 써서 DST가 자동 적용되게 하라. 해당 지역이 DST를 시행하면 UTC−8 같은 오프셋을 결코 하드코딩하지 마라

DST 공백과 DST 중복 설명

두 전환이 두 가지 고전적 DST 버그를 만듭니다. 봄철 앞당김 공백은 일정과 알림 실패의 가장 흔한 원인입니다 — 전환일 02:30으로 잡은 이벤트는 현지에 존재하지 않습니다. 가을철 되돌림 중복은 더 미묘합니다 — 전환일 01:30의 이벤트는 한 시간 간격으로 두 번 존재합니다. 두 경우 모두 명시적 정책이 필요합니다.

전환시계 동작현지 시각에 미치는 영향
봄철 앞당김02:00 → 03:0002:00–02:59는 결코 존재하지 않음("공백")
가을철 되돌림02:00 → 01:0001:00–01:59가 두 번 일어남("중복")
  • 공백: ISO 8601 / RFC 3339은 공백 안의 시각을 일의적으로 표현할 수 없다
  • 중복: 어느 발생인지 명시적 오프셋(UTC−5 vs UTC−4)으로 표기하라
  • Python: zoneinfo는 fold 속성으로 공백/중복을 처리한다(0 = 첫 번째 발생, 1 = 두 번째)
  • JavaScript Temporal: ZonedDateTime은 모호성 해소 옵션을 받는다("earlier", "later", "compatible", "reject")
  • DST 지역의 02:30 cron은 앞당김에 건너뛰거나 되돌림에 두 번 발화한다 — 가능하면 UTC로 예약하라

어느 지역이 DST를 시행하는가

DST 채택은 들쭉날쭉하고 정기적으로 바뀝니다 — 규칙을 하드코딩하지 말고 항상 현재의 IANA tzdata를 참조하세요. 다음은 2026년에 대해 대체로 정확합니다.

  • 미국: 대부분의 주가 DST를 시행(3~11월). 애리조나(나바호 네이션 제외)와 하와이는 안 함
  • 캐나다: 대부분의 주가 DST를 시행. 서스캐처원, 유콘 대부분, 그리고(2026년부터) 브리티시컬럼비아 대부분은 안 함
  • 유럽 연합: DST 시행(3월 마지막 일요일 → 10월 마지막 일요일). 2019년 폐지 표결은 연기됨
  • 영국: 여름에 BST(UTC+1)로 DST 시행
  • 멕시코: 2022년 전국 DST 폐지. 미국에 맞춘 국경 지자체만 아직 시행
  • 호주: NSW, 빅토리아, 태즈메이니아, ACT, 남호주만 DST 시행(10~4월)
  • 아시아, 아프리카, 남미 대부분: DST 없음

코드에서 DST를 안전하게 다루기

믿을 만한 방법은 모든 것을 Unix 타임스탬프(또는 IANA 시간대가 붙은 날짜·시각)에 고정하고, 현지 시각을 표시의 문제로 다루는 것입니다.

  • 저장: Unix 에포크 초, 또는 시간대 인식 datetime(예: Postgres의 TIMESTAMPTZ)
  • 계산: UTC, 또는 IANA 인식 날짜·시각 라이브러리(Temporal, zoneinfo, java.time)에서
  • 표시: 렌더링 시점에 사용자의 IANA 시간대로 변환
  • 예약: "현지 오전 9시"에 머물러야 하는 반복 이벤트에는 현지 벽시계와 함께 IANA 시간대를 저장
  • IANA 이름 대신 EDT/PDT/CET 약어를 결코 저장하지 마라

DST 폐지를 향한 움직임

여러 의회가 연 2회 시계 변경 폐지를 표결했지만, 실제 정책 변화로 이어진 표결은 거의 없습니다. 최근의 주목할 만한 움직임:

  • 2022년: 미국 상원이 Sunshine Protection Act를 만장일치로 통과시켰으나 하원에서 정체
  • 2022년: 멕시코가 전국 DST 폐지
  • 2024년: 트럼프가 영구 DST에 공개적으로 반대하면서 상원의 동력이 둔화
  • 2026년: 브리티시컬럼비아가 영구 UTC−7이 되었고, 미국 하원 에너지·통상위원회가 새 DST 폐지 조문을 진전시킴
  • 2019년: EU는 원칙적으로 DST 폐지를 표결했으나 시행을 거듭 연기함

관련 참고

FAQ

DST가 Unix 타임스탬프에 영향을 주나요?
아니요. Unix 타임스탬프는 1970년 이후 UTC 초를 세며 모든 DST 전환을 매끄럽게 지나갑니다. 바뀌는 것은 그 초의 현지 시각 해석뿐입니다.
모호한 시각이란 무엇인가요?
모호한 시각은 서로 다른 두 UTC 시점에 대응하는 현지 시각입니다. 가을철 전환에서 시계가 02:00에서 01:00으로 되돌아가 01:00–01:59 시간이 두 번 일어날 때 발생합니다. 명시적 오프셋이나 라이브러리의 fold/모호성 해소 옵션으로 일의적으로 만드세요.
DST 전환 시 예약된 작업은 어떻게 되나요?
DST 지역에서 02:30에 예약한 cron 작업은 건너뛰거나(앞당김) 두 번 실행됩니다(되돌림). 해법은 UTC로 예약하거나 명시적으로 모호성을 해소하는 스케줄러를 쓰는 것입니다.
코드에서는 "EST"와 "America/New_York" 중 무엇을 써야 하나요?
America/New_York입니다. IANA 이름은 겨울에 EST(UTC−5), 여름에 EDT(UTC−4)를 자동 적용합니다. \"EST\"를 하드코딩하면 값이 1년의 절반 동안 틀립니다.
코드에서 DST를 올바르게 다루려면?
UTC(또는 IANA 시간대가 붙은 날짜·시각)로 저장·계산하고, 표시할 때만 현지 시각으로 변환하세요. America/New_York 같은 IANA 시간대 이름을 쓰고, 고정 오프셋이나 EST 같은 약어는 쓰지 마세요. 그러면 DST가 자동 적용됩니다.
2026년 DST는 언제 시작하고 끝나나요?
미국에서는 DST가 2026년 3월 8일 현지 02:00에 시작해(03:00으로 앞당김) 2026년 11월 1일 현지 02:00에 끝납니다(01:00으로 되돌림). EU에서는 전환이 2026년 3월 29일과 10월 25일입니다.