MiServe DevTools

내 스티커

도구를 여기에 고정하세요. 이 브라우저에 저장됩니다.

Go 시간 포맷·strftime 변환기

Go 시간 레이아웃을 작성해 현재 시각에 적용한 결과를 보고, Go 레이아웃과 strftime을 서로 변환하고, 기준 시각 토큰을 찾아봅니다.

어느 쪽 필드를 고쳐도 다른 쪽이 따라 바뀝니다.

이 레이아웃으로 표시한 현재 시각

미리 정의된 레이아웃
기준 시각 토큰

Go의 기준 시각은 Mon Jan 2 15:04:05 MST 2006입니다. 01/02 03:04:05PM '06 -0700으로 쓰면 월, 일, 시, 분, 초, 연도, 시간대 오프셋이 차례로 1부터 7이 됩니다. 토큰을 선택하면 레이아웃의 커서 위치에 삽입됩니다.

Go 토큰의미strftime현재
연도, 네 자리 %Y
연도, 마지막 두 자리 %y
월(숫자), 두 자리 %m
월(숫자), 앞의 0 없음 %-m
월 이름, 약어 %b
월 이름, 전체 %B
일, 두 자리 %d
일, 앞의 0 없음 %-d
일, 앞을 공백으로 채움 %e
연중 일수(1년 중 몇 번째 날), 세 자리 %j
시(24시간제), 두 자리 %H
시(12시간제), 두 자리 %I
시(12시간제), 앞의 0 없음 %-I
분, 두 자리 %M
초, 두 자리 %S
AM 또는 PM %p
요일 이름, 약어 %a
요일 이름, 전체 %A
시간대 약어 %Z
UTC 오프셋(시와 분, 콜론 없음) %z
UTC 오프셋(시와 분, 콜론 포함) %:z
콜론 포함 UTC 오프셋, 오프셋이 0이면 문자 Z —
초의 소수 부분, 0 하나당 한 자리로 자릿수 고정 .%L
초의 소수 부분, 끝의 0은 빼고 9 하나당 최대 한 자리 —

WebAssembly로 브라우저에서 실행됩니다. 붙여 넣은 내용은 업로드되지 않습니다.

이 도구에 대하여

레이아웃은 패턴이 아니라 예시입니다

대부분의 언어는 %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이 그렇습니다. 변환 대상 언어의 문서를 확인하세요.

자주 묻는 질문

Go는 왜 YYYY-MM-DD 대신 2006-01-02 15:04:05를 쓰나요?

Go 레이아웃은 고정된 기준 시각 Mon Jan 2 15:04:05 MST 2006이 어떻게 출력되어야 하는지를 보여 줍니다. 그 각 부분이 월, 일, 시, 분, 초, 연도, 시간대 오프셋 순으로 1부터 7까지의 숫자이므로, 자리 표시자 문법 없이도 각 숫자가 날짜의 한 부분을 가리킵니다.

ISO 8601 또는 RFC 3339 타임스탬프의 Go 레이아웃은 무엇인가요?

time.RFC3339 상수인 2006-01-02T15:04:05Z07:00을 사용하세요. 초의 소수 부분이 필요하면 2006-01-02T15:04:05.999999999Z07:00인 time.RFC3339Nano를 사용하세요.

Go 레이아웃에서 밀리초를 출력하려면 어떻게 하나요?

15:04:05.000처럼 초 뒤에 .000을 붙이세요. 0 하나가 한 자리이므로 .000000은 마이크로초가 됩니다. 끝의 0을 없애려면 .999처럼 9를 쓰세요.

Go 레이아웃에서 24시간제로 표시하려면 어떻게 하나요?

시를 15로 쓰세요. 03과 3은 12시간제를 뜻하며, 보통 AM 또는 PM을 출력하는 PM과 함께 씁니다.

시간의 다른 도구