하리Hari

시간대 (timezone 패키지)

timezone 패키지로 도시마다 다른 시각과 서머타임을 다뤄요.

10장의 [날짜]컴퓨터에 맞춰진 시간대만 써요. 서울 시각을 뉴욕 시각으로 바꾸거나, 서머타임이 있는 도시의 요일을 구하려면 시간대를 직접 골라야 하죠. 그럴 때 쓰는 것이 timezone 패키지예요. Hana 런타임에 함께 들어 있고, 시간대 데이터(IANA 시간대 데이터베이스)가 패키지 안에 있어서 컴퓨터에 따로 설치할 것이 없어요. 대신 브라우저에는 들어 있지 않아서, 이 문서의 실행 버튼에서는 쓸 수 없어요.

[날짜]처럼 [timezone]에서 <도구>를 가져오자로 가져와요. 시각은 [날짜]와 같은 유닉스 초(숫자)이고, 서식은 YYYY MM DD HH mm ss가 각각 연·월·일·시·분·초를 뜻하는 글이에요.

도구 하는 일
<시간대서식>(시각, 서식, 시간대) 그 시간대의 시계로 시각을 글로 써요
<시간대읽기>(글, 서식, 시간대) 그 시간대의 시계로 쓴 글을 시각으로 읽어요
<시간대요일>(시각, 시간대) 그 시간대의 달력으로 요일을 알려줘요 (월요일 1 ~ 일요일 7)
<시간대오프셋>(시각, 시간대) 그 시각에 시간대가 UTC보다 몇 초 앞서 있는지 알려줘요 (서울은 32400)

시간대"Asia/Seoul", "America/New_York"처럼 IANA 이름이거나, "UTC", 또는 "+09:00"·"-0530" 같은 고정 오프셋이에요. 컴퓨터의 시간대는 고를 수 없어요. 어느 컴퓨터에서 실행해도 같은 결과가 나오게 하려는 거예요.

[timezone]에서 <시간대서식>을 가져오자
[timezone]에서 <시간대요일>을 가져오자

'시각'을 [숫자]인 1000000000으로 정하자
<시간대서식>('시각', "YYYY-MM-DD HH:mm", "Asia/Seoul")를 출력하자
<시간대서식>('시각', "YYYY-MM-DD HH:mm", "America/New_York")를 출력하자
<시간대요일>('시각', "America/New_York")를 출력하자

같은 순간이 서울에서는 2001-09-09 10:46, 뉴욕에서는 2001-09-08 21:46이고, 뉴욕은 아직 토요일이라 요일은 6이 나와요. 서머타임도 데이터에 들어 있어서 뉴욕의 오프셋은 여름에 -14400, 겨울에 -18000이에요. 옛날 날짜도 그때의 규칙대로 계산해요.

[timezone]에서 <시간대읽기>를 가져오자
[timezone]에서 <시간대오프셋>을 가져오자

<시간대읽기>("2024-07-01 12:00:00", "YYYY-MM-DD HH:mm:ss", "Asia/Seoul")를 출력하자
<시간대오프셋>(<시간대읽기>("2024-07-01 12:00:00", "YYYY-MM-DD HH:mm:ss", "America/New_York"), "America/New_York")를 출력하자

시계가 건너뛰거나 되돌아갈 때

서머타임이 시작되는 날에는 시계가 한 시간 건너뛰어서 그 사이의 시각이 없어요. 뉴욕의 2024-03-10 02:30:00이 그래요. 이런 글을 읽으려 하면 에러가 나요. 반대로 서머타임이 끝나는 날에는 시계가 한 시간 되돌아가서 같은 시각이 두 번 나와요(2024-11-03 01:30:00). 이때는 이른 쪽을 돌려줘요.

알아 두면 좋은 것

  • 시간대 이름을 잘못 쓰거나("Asia/Seol"), 빈 글이나 "Local"을 쓰면 에러가 나요.
  • 없는 날짜(2024-02-30)나 서식과 안 맞는 글을 읽으려 하면 에러가 나요.
  • 프로그램을 실행 파일로 묶어도 이 패키지가 함께 들어가서, 묶은 프로그램도 시간대 이름을 그대로 써요.
놀이터
결과
코드를 작성하고 '실행' 버튼을 눌러보세요.