90분을 적는 네 가지 방법
PT1H30M, 01:30:00, 90m, 5400. 기간 표기가 왜 여러 개이고 어디서 서로 어긋나는지 정리했습니다.
같은 90분이 코드 안에서 네 가지 모양으로 돌아다닙니다.
PT1H30M ISO 8601
01:30:00 시계 표기
90m 사람이 쓰는 축약
5400 초
변환은 곱셈과 나눗셈뿐인 것 같지만, 몇 자리에서 그렇지 않습니다.
ISO 8601에서 M은 두 가지다
P1M → 1개월
PT1M → 1분
P는 기간의 시작을 알리고, T는 시각 부분의 시작을 알립니다. M은 T 앞에 있으면 달(month), 뒤에 있으면 분(minute)입니다. T를 빼먹으면 조용히 다른 값이 됩니다.
전체 구조는 P[n]Y[n]M[n]W[n]D T [n]H[n]M[n]S입니다. 90분을 적는 방법이 이 안에서도 여럿입니다.
PT1H30M → 5400초
PT90M → 5400초
PT5400S → 5400초
셋 다 유효하고 값이 같습니다. 정규화된 형태를 요구하는 시스템이라면 PT1H30M을 기대할 텐데, 규격 자체는 나머지도 허용합니다.
거절해야 하는 것들도 있습니다.
P 거절 지정자가 하나도 없다
PT 거절 T 뒤가 비었다
1H30M 거절 P 가 없다
P1H 거절 H 는 T 뒤에만 온다
PT1D 거절 D 는 T 앞에만 온다
P-1D 거절 음수는 이 위치에 못 온다
P1.5Y 통과 마지막 성분의 소수는 허용된다
P1.5Y가 통과하는 것이 규격입니다. 다만 1.5년이 며칠인지는 정해져 있지 않습니다.
달과 초는 서로 환산되지 않는다
2026-01-01 + P1M = 2026-02-01 → 31일
2026-02-01 + P1M = 2026-03-01 → 28일
2024-02-01 + P1M = 2024-03-01 → 29일
P1M은 28일에서 31일 사이입니다. 어느 날짜에 더하느냐로 정해집니다. 그래서 P1M을 초로 바꿔 저장할 수 없습니다 — 기준 날짜 없이는 값이 없습니다.
ISO 8601이 기간을 두 덩어리로 나눈 이유입니다. 년·월은 달력 단위라 기준이 필요하고, 일·시·분·초는 고정 길이입니다.
정확히는 일도 완전히 고정은 아닙니다.
2026-03-08 New York 23시간
2026-11-01 New York 25시간
서머타임 전환일입니다. P1D를 24시간으로 환산하면 이 이틀에서 어긋납니다.
시계 표기는 24시를 넘어간다
90초 → 0:01:30
5400초 → 1:30:00
3661초 → 1:01:01
86399초 → 23:59:59
90061초 → 25:01:01
25:01:01은 시각이 아니라 기간이라 유효합니다. 시각이라면 없는 값이지만 "25시간 1분 1초"는 말이 됩니다. 기간을 시각 파서로 읽으면 여기서 실패합니다.
자릿수도 정해진 규칙이 없습니다. 1:30:00인지 01:30:00인지, 한 시간 미만일 때 1:30으로 줄이는지 0:01:30으로 유지하는지가 구현마다 다릅니다. 이 표기로 주고받으려면 양쪽이 같은 규칙을 써야 합니다.
사람이 쓴 축약
90m, 1h30m, 1.5시간, 1시간 30분 같은 입력은 규격이 없습니다. 파서를 직접 만들 때 정해야 할 것들이 있습니다.
- 단위 없는 숫자는 무엇인가 —
90이 90초인지 90분인지 m이 분인지 달인지 — ISO와 반대로 대부분의 축약에서m은 분입니다- 공백과 순서를 허용하는가 —
1h 30m,30m 1h - 합산인가 대체인가 —
1h 90m이 2시간 30분인지 오류인지
기본값을 문서에 적어 두지 않으면 사용자와 구현이 다른 가정을 합니다.
확인 순서
- ISO 8601 기간을 만든다면
T가 빠지지 않았는지 봅니다.P1M과PT1M은 4만 배 남짓 차이입니다 — 한 달을 30일로 보면 43,200배입니다 - 달 단위 기간을 초로 저장하고 있다면 기준 날짜를 함께 저장하거나 달 단위로 저장합니다
- 하루를 86,400초로 더하는 코드가 서머타임 지역에서 도는지 확인합니다
- 시계 표기를 파싱한다면 24시 이상을 받는지 봅니다
- 사용자 입력 축약은 단위 없는 숫자의 기본 단위를 정하고 화면에 표시합니다
tools.onuel.dev의 기간 변환기는 초·분·시·시계 표기·ISO 8601 사이를 오갑니다. 90m, 01:30:00, PT1H30M을 각각 넣어 보면 같은 값으로 읽히는 것을 확인할 수 있습니다. 날짜가 달린 계산은 나이·날짜 차이 계산기에서, 타임스탬프 변환은 Epoch 변환에서 하고, 지역이 걸리면 시간대 변환기를 함께 씁니다. 길이·무게 같은 단위는 단위 변환기입니다.
- #기간
- #ISO 8601
- #파싱