SoupCalc

날짜 계산기: ISO 8601 정밀도로 기간 계산, 시간 더하기 및 빼기


날짜 계산기의 작동 원리

날짜 계산기는 두 가지 근본적인 질문에 답합니다. 두 시점 사이에 얼마나 많은 시간이 있는지, 그리고 알려진 날짜를 고정된 간격만큼 이동하면 어떤 시점이 되는지입니다. 내부적으로 두 연산은 하나의 통일된 접근 방식을 공유합니다. ISO 8601 표준을 사용하여 날짜를 모호하지 않은 순간으로 파싱하고, 협정 세계시(UTC) 기준으로 산술을 수행하며, 사용자가 요청한 세분화 수준으로 반올림된 결과를 제시합니다.

이 도구는 시작 날짜와 종료 날짜를 받아들여 두 날짜 사이의 경과 기간을 계산하고, 그 기간을 전체 일수와 나머지 시, 분, 초로 표현합니다. 또한 단일 날짜와 정수 오프셋(양수 또는 음수)을 받아 지정된 수의 연, 월, 일을 더하거나 뺀 결과 날짜를 반환할 수도 있습니다. 두 모드 모두 동일한 엄격한 기반 위에서 작동하므로 출력은 결정론적이며 재현 가능합니다.

ISO 8601 입력 파싱 이해하기

계산기에 입력되는 모든 날짜는 ISO 8601 결합 날짜-시간 형식인 YYYY-MM-DDTHH:MM:SS를 준수해야 합니다. T 구분자는 달력 날짜와 벽시계 구성 요소를 구분하며, 모든 시간은 파싱 즉시 UTC로 해석됩니다. 암시적인 현지 시간대도, 일광 절약 시간 조정도, 모호한 시간도 존재하지 않습니다. 사용자가 부분 타임스탬프(예: 시간이 없는 날짜)를 제공하는 경우, 도구는 해당 날짜의 UTC 자정(T00:00:00)으로 처리합니다.

ISO 8601 패턴과 일치하지 않는 입력은 즉시 거부됩니다. 날짜 순서에도 동일한 엄격함이 적용됩니다. 종료 날짜가 시작 날짜보다 앞서는 경우, 계산은 음의 기간을 생성하지 않습니다. 대신 도구는 입력을 유효하지 않은 것으로 처리하고 중단하여, 사용자가 해석하기 어려운 결과에 의존하는 것을 방지합니다. 이러한 역순 거부 정책은 출력 공간을 깔끔하게 유지합니다. 반환되는 모든 기간은 양의 시간 범위입니다.

기간 계산: 일, 시, 분, 초

도구가 두 타임스탬프 사이의 경과 시간을 계산할 때, 먼저 종료 시점의 Unix 에포크 초에서 시작 시점의 Unix 에포크 초를 뺍니다. 그 결과로 나온 정수는 총 경과 초를 나타냅니다. 이 단일 값으로부터 계산기는 사용자가 보는 모든 구성 요소를 도출합니다.

  • 전체 일수는 총 초를 86,400(표준 UTC 하루의 초 수)으로 나눈 정수 몫입니다. 나머지는 시, 분, 초 버킷을 채우는 값입니다.
  • 총 시간은 총 초를 3,600으로 나누고 내림한 정수입니다. 이는 "일수를 제외한 나머지 시간"이 아니라 전체 범위를 시간으로 표현한 것입니다.
  • 총 분총 초도 동일한 패턴을 따릅니다. 원시 초 수를 각각 60과 1로 나누어 내림합니다.

이러한 내림 나눗셈 설계는 90,123초의 기간이 총합 수준 보기에서 "1일 1시간 2분 3초"로 표시되지 않음을 의미합니다. 대신 총 시간 수치는 25시간, 총 분은 1,502분, 총 초는 90,123초로 표시됩니다. 이러한 누적 수치와 함께, 도구는 전체 일수와 나머지 시, 분, 초로 분해된 대응 값도 표시하여 두 관점을 모두 확인할 수 있습니다.

월 및 연도 오프셋을 사용한 날짜 연산

일수를 더하거나 빼는 것은 간단합니다: 계산기는 기저의 UTC 타임스탬프를 정확한 초 수만큼 이동시킵니다. 그러나 월과 연도는 가변적인 길이를 가지므로, 이 도구는 달력 인식 방식을 사용합니다.

사용자가 날짜에 한 달을 더하면, 이 도구는 월 필드를 증가시키면서 일자 값을 보존합니다 — 단, 한 가지 중요한 예외가 있습니다. 대상 월의 일수가 원래 일자보다 적으면, 계산기는 결과를 해당 월의 마지막 유효한 날짜로 고정합니다. 이것이 월말 고정(month-end clamping)입니다. 예를 들어, 1월 31일에 한 달을 더하면 윤년에는 2월 29일, 그 외에는 2월 28일이 됩니다. 시간 구성 요소는 이 연산 전반에 걸쳐 변경되지 않으므로, 2024-01-31T12:00:00에 한 달을 더하면 2024-02-29T12:00:00이 됩니다.

연도 오프셋도 동일한 방식으로 작동합니다: 연도 필드를 증가시키고, 월을 유지하며, 대상 날짜가 유효하지 않은 경우 일자를 고정합니다 (가장 일반적인 경우는 윤년의 2월 29일에 1년을 더했을 때 윤년이 아닌 해에 도달하는 경우입니다). 정수 오프셋만 지원됩니다 — 분수 월이나 분수 연도는 지원되지 않는데, 이는 반 달이 무엇을 의미하는지에 대해 보편적으로 인정된 정의가 없기 때문입니다.

실제 계산 예시

시작 날짜가 2026-01-01T00:00:00이고 종료 날짜가 2026-01-02T01:02:03이라고 가정합니다. 계산기는 초 단위 차이를 계산합니다:

이 간격은 정확히 1일, 1시간, 2분, 3초입니다. 누적 기준으로는 25시간, 1,502분, 90,123초입니다. 이 도구는 네 가지 세분화 단위를 모두 나란히 표시하므로, 사용자는 분할 보기(1일 전체와 나머지)와 각 총합 수치를 동시에 볼 수 있습니다.

달력 연산의 경우, 2024-01-31T12:00:00에 한 달을 더하는 예를 들어 보겠습니다. 1월은 31일까지 있으므로, 단순한 대상 날짜는 2월 31일이 될 것입니다. 그러나 윤년인 2024년의 2월은 29일까지밖에 없으므로, 이 도구는 일자를 29일로 고정합니다. 시간 구성 요소는 정오로 고정된 채 유지되어 2024-02-29T12:00:00이 됩니다. 이 고정 동작은 결정적이며 모든 월말 경계 케이스에서 일관되게 적용됩니다.

정확도 및 제한 사항

이 계산기는 전적으로 UTC로 작동하며 시간대 오프셋이나 일광 절약 시간 전환을 고려하지 않습니다. 파싱된 UTC 타임스탬프에서 직접 기간을 도출하고 정수 초를 보고하지만, 그 결과는 일광 절약 시간 변경을 경험하는 사용자의 "벽시계" 체감을 반영하지 않습니다. 런던에 있는 사용자가 DST 변경을 걸치는 두 순간 사이에 로컬 시계 시간으로 몇 시간이 차이 나는지 알아야 한다면, 해당 조정을 수동으로 적용해야 합니다.

윤초(leap second)는 모델링되지 않습니다. 이 도구는 모든 UTC 날짜를 정확히 86,400초로 취급합니다. 수십 년에 걸친 기간의 경우, 무시된 윤초로 인한 누적 오차가 수십 초에 이를 수 있지만, 이는 달력 날짜 계산에는 무시할 수 있는 수준이며 고정밀 과학적 용도에는 관련이 있습니다.

또한 이 도구는 Unix 기원일(1970년 1월 1일) 이전 또는 9999년 이후의 날짜를 처리하지 않습니다. 이 범위를 벗어나는 입력은 거부됩니다. 월말 고정 규칙은 문서화되어 있으며 일관되게 적용되지만, 사용자는 비즈니스 규칙이 때때로 다를 수 있다는 점을 인지해야 합니다 — 예를 들어, 일부 금융 계약에서는 "1월 31일의 한 달 후"를 윤년 여부와 관계없이 매년 2월 28일로 정의합니다. 이 도구의 동작은 특정 업계 표준이 아닌 일반적인 월말 규칙을 따릅니다.

출처

ISO 8601 표준은 날짜와 시간의 표현을 규정하며, 이 도구의 모든 구문 분석 결정의 기반이 됩니다. 전체 명세는 국제 표준화 기구(International Organization for Standardization)에서 관리합니다.

편집 기록

이 문서는 날짜 계산기 모듈 출시에 맞춰 작성되었습니다. 2026년 8월 기준의 구현을 반영합니다. 제공된 예시는 동일한 날짜에 도구의 출력 결과와 대조하여 수치가 실시간 계산과 일치하는지 확인하였습니다.

향후 개정 시에는 구문 분석 규칙, 지원되는 날짜 범위 또는 클램핑 동작의 변경 사항이 기록될 것입니다. 계산기가 시간대 인식 입력을 처리하거나 윤초를 모델링하도록 업데이트될 경우, 이 문서도 그에 따라 수정될 것입니다. 저자: SoupCalc 편집팀 최종 검토일: 2026년 8월 11일.