어떤 날짜를 테스트해야 할까요?
날짜 테스트의 절반은 시계를 움직이는 일입니다. 나머지 절반은 어디로 움직일지 아는 일입니다. 온라인 계산기는 오늘로부터 90일 뒤가 언제인지 알려 줍니다. 하지만 그날이 은행 휴일이라는 것도, 분기의 마지막 날이라는 것도 알려 주지 않습니다.
04/08/2008을 붙여 넣으면 하나를 짐작하지 않고 두 가지 해석을 모두 보여 줍니다.실제 공휴일을 반영한 영업일
“10영업일 뒤”는 단순한 산수가 아닙니다. 어느 나라의 달력으로 세느냐에 따라 달라집니다. 같은 시작일, 같은 10일인데 답은 두 가지입니다.
$ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar us-banking result: 2027-09-16T00:00:00 $ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar pl result: 2027-09-15T00:00:00
하루 차이이며, 그 사이의 날짜를 물어보면 계산기가 이유를 알려 줍니다.
$ chrono calc --base 2027-09-06T00:00:00 --calendar us-banking metadata: weekday Monday business day no (us-banking) holiday Labor Day what this date lands on: public holiday (weekend and holiday marks follow the us-banking calendar)
미국과 폴란드는 기준 달력으로 제공됩니다. 둘을 합치면 존재하는 모든 규칙 유형, 즉 고정 날짜, 달의 n번째 특정 요일, 부활절에서 계산되는 날짜, 토요일에 걸린 공휴일을 앞선 금요일에 쉬는 미국식 규칙을 모두 다룰 수 있기 때문입니다. 나라를 추가하는 것은 코드 변경이 아니라 데이터 파일을 추가하는 일입니다.
모든 형식을 한 번에
테스트 대상 앱은 자신이 기대하는 형태로 날짜를 원합니다. 변환하게 하는 대신 계산기가 모든 형식을 출력하며, 표준에 맞지 않는 형식을 위한 사용자 마스크도 제공합니다.
$ chrono calc --preset year-2038 --zone +00:00 Chrono Mock - date calculator preset: year-2038 - 2038 boundary explains: Does the app survive the 32-bit Unix time boundary (2038-01-19T03:14:07Z)? result: 2038-01-19T03:14:07 formats: ISO date 2038-01-19 ISO datetime 2038-01-19T03:14:07+00:00 US 01/19/2038 PL 19.01.2038 epoch (s) 2147483647 epoch (ms) 2147483647000 FILETIME 137919572470000000 RFC 1123 Tue, 19 Jan 2038 03:14:07 GMT ... what this date lands on: at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)
이 에포크 값은 우연이 아닙니다. 2147483647은 부호 있는 32비트 정수가 담을 수 있는 가장 큰 수이며, 이 날짜가 중요한 이유의 전부입니다.
날짜를 거꾸로 읽기
반대 방향도 똑같이 유용합니다. 로그에서 날짜를 붙여 넣고 그것이 무엇인지 알아보세요. 형식이 모호할 때(04/08은 세계 절반에서 모호합니다) 하나를 짐작하지 않고 두 가지 해석을 모두 보여 줍니다. 원래의 버그 보고가 바로 짐작에서 나왔기 때문입니다.
$ chrono calc --analyze 04/08/2027 Chrono Mock - date analysis input: 04/08/2027 (ambiguous - month/day order differs by locale) US MM/DD/YYYY: 2027-04-08 (Thursday) PL DD/MM/YYYY: 2027-08-04 (Wednesday)
넉 달 차이에 요일도 다릅니다. ISO 날짜는 모호하지 않으며 그대로 읽힙니다. 날짜가 전혀 아닌 것은 짐작하지 않고 거부합니다.
문장이 아니라 단계로 만듭니다
시점은 시작점에 단계를 더한 것이며, 각 단계 뒤에 중간 결과가 표시되므로 뜻밖의 답을 내는 식은 어디서 어긋났는지 보여 줍니다. 단계는 다섯 종류입니다. 단위로 이동, 시각 설정, 기간 경계로 스냅, 가장 가까운 영업일로 이동, 다른 시간대로 다시 표현입니다.
# 해가 바뀌기 직전의 마지막 1초 chrono calc --base today --snap eoy # 90영업일 뒤, 미국 은행 달력 기준 chrono calc --base today --shift +90bd --calendar us-banking # 18년 하루 전, 나이 확인용 chrono calc --base today --shift -18y --shift -1d
계산한 날짜는 어떤 것이든 곧바로 대체 세션에 넣을 수 있고, --json은 같은 결과를 기계용 형식으로 출력합니다. 테스트할 가치가 있는 날짜 →