이 도구에 대하여
레이아웃은 패턴이 아니라 예시입니다
대부분의 언어는 %Y-%m-%d나 YYYY-MM-DD 같은 자리 표시자로 날짜 형식을 나타냅니다. Go는 다릅니다. 특정한 한 시점, 즉 기준 시각이 어떻게 보여야 하는지를 직접 써 두면, time.Format이 다른 시각도 같은 방식으로 출력합니다. 기준 시각은 Mon Jan 2 15:04:05 MST 2006입니다.
이 값들은 미국식 순서인 01/02 03:04:05PM '06 -0700으로 썼을 때 차례로 커지도록 정해졌습니다. 월 1, 일 2, 시 3(24시간제로는 15), 분 4, 초 5, 연도 6, 그리고 시간대 오프셋 -7시간입니다. 각 값은 한 가지만 나타낼 수 있으므로, Go는 01이 월이고 04가 분이라는 것을 알 수 있습니다.
흔한 실수
01이 월이고 02가 일이므로, 일이 먼저 오는 날짜는 02/01/2006이 되며, 기준 시각의 순서에 익숙한 사람에게는 틀린 것처럼 보입니다. 다른 습관대로 쓴 레이아웃도 오류를 내지 않습니다. Go는 알아보지 못한 부분을 리터럴 텍스트로 출력하므로 YYYY-MM-DD는 그대로 나오고, 알아보는 숫자는 모두 토큰으로 읽으므로 2021-12-25는 엉뚱한 숫자들로 나옵니다.
토큰을 이스케이프하는 방법은 없습니다. 우연히 토큰이 들어 있는 텍스트는 치환되므로, 레이아웃 안의 리터럴 Jan, Mon이나 2 같은 숫자는 값으로 바뀝니다. 이런 텍스트는 레이아웃 바깥에서 덧붙이세요.
Z07:00은 UTC일 때 Z를, 그 밖에는 숫자 오프셋을 출력하며, 이는 RFC 3339가 요구하는 형식입니다. 반면 -07:00은 항상 숫자를 출력합니다. 초의 소수 부분에서 .000은 끝의 0을 유지하고 .999는 제거합니다. 월과 요일 이름은 항상 영어입니다.
미리보기와 변환의 동작 방식
미리보기는 WebAssembly로 컴파일되어 브라우저에서 실행되는 Go의 time.Format이 만들어 내므로, 같은 시점과 오프셋에 대해 Go 프로그램이 출력하는 결과를 그대로 보여 줍니다. 현재 시각, 내 시간대의 UTC 오프셋과 약어는 브라우저가 제공합니다. 브라우저에 해당 시간대의 약어가 없으면 +03 같은 숫자 약어를 쓰며, 이는 고유한 문자 약어가 없는 시간대에 Go가 출력하는 것과도 같습니다. 일부 시간대에서는 브라우저의 약어가 Go가 읽는 시간대 데이터베이스의 약어와 다릅니다.
두 포맷이 다루는 범위는 같지 않습니다. strftime에는 Z07:00처럼 동작하는 지시자가 없고, Go에는 주차(%U, %W, %V), 숫자 요일(%u, %w), epoch 이후 초(%s)에 해당하는 토큰이 없습니다. 변환기는 이런 부분을 그대로 복사하고 입력란 아래에 알려 줍니다. 또한 strftime 포맷의 리터럴 텍스트 중 Go가 토큰으로 읽을 부분도 알려 줍니다. 레이아웃에는 그런 텍스트를 넣을 수 없기 때문입니다.
strftime 쪽 지시자 중 일부는 모든 구현에 있지는 않은 확장 기능입니다. 패딩을 없애는 플래그(%-d), 콜론이 있는 오프셋(%:z), 소수 초 지시자 %L, %f, %N이 그렇습니다. 변환 대상 언어의 문서를 확인하세요.