시간 포맷팅
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 60번째.
time.Time 객체를 가지게 되면, 이를 읽기 쉬운 문자열 형식으로 변환해야 할 때가 많습니다. Go는 다른 프로그래밍 언어와는 다른 독특한 시간 포매팅 방식을 사용합니다.
%Y-%m-%d와 같은 형식 코드를 사용하는 대신, Go는 기준 날짜를 템플릿으로 사용합니다. 이 기준 날짜는 Mon Jan 2 15:04:05 MST 2006이며, 이는 정확한 시점인 2006년 1월 2일 오후 3시 4분 5초 산악 표준시(MST)를 나타냅니다.
now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // 출력: 2023-10-26핵심적인 통찰은 기준 날짜 구성 요소를 원하는 패턴으로 배열한다는 것입니다. YYYY-MM-DD 형식의 경우, 해당 패턴에서 기준 날짜가 그렇게 보이기 때문에 "2006-01-02"를 사용합니다. Jan 2, 2006과 같은 다른 형식의 경우, "Jan 2, 2006"을 사용하면 됩니다.
이 레이아웃 기반 접근 방식은 Go의 시간 포맷팅을 기억하기 쉽고 유연하게 만듭니다. 기준 날짜만 기억하면, 구성 요소를 원하는 패턴으로 배치하는 것만으로 어떤 포맷이든 만들 수 있습니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움Go의 독특한 기준 날짜 레이아웃 시스템을 사용하여 time.Time 객체의 형식을 지정하는 다중 형식 날짜 및 시간 표시 시스템을 만드세요. 이 챌린지는 다양한 날짜 및 시간 표현을 생성하기 위해 서로 다른 레이아웃 패턴과 함께 Format 메서드를 사용하는 능력을 테스트합니다.
두 개의 입력을 받게 됩니다:
"year:month:day:hour:minute"형식의 날짜 정보를 포함하는 문자열 (예:"2023:12:25:14:30")"format1,format2,format3"형식으로 쉼표로 구분된 형식 요청을 포함하는 문자열 (예:"iso,american,european,time12,time24")
당신의 과제는 다음과 같습니다:
- 콜론을 기준으로 첫 번째 입력을 분리하여 연, 월, 일, 시, 분 값을 추출합니다.
strconv패키지를 사용하여 이러한 문자열 값을 정수로 변환합니다.- 파싱된 값들을 사용하여
time.Date로time.Time객체를 생성합니다 (위치는time.UTC를 사용하고, 초와 나노초는 0으로 설정합니다). - 애플리케이션 헤더를 표시합니다:
"=== DATE/TIME FORMATTER ===" - 소스 시간을 표시합니다:
"Source time: [complete_time_object]" - 쉼표를 기준으로 두 번째 입력을 분리하여 형식 요청을 파싱합니다.
- 형식 지정 헤더를 표시합니다:
"Formatted outputs:" - 각 형식 요청에 대해
Format메서드와 함께 적절한 레이아웃 문자열을 사용합니다:"iso"의 경우: 레이아웃"2006-01-02"를 사용하고"ISO format: [formatted_result]"를 표시합니다."american"의 경우: 레이아웃"01/02/2006"를 사용하고"American format: [formatted_result]"를 표시합니다."european"의 경우: 레이아웃"02/01/2006"를 사용하고"European format: [formatted_result]"를 표시합니다."long"의 경우: 레이아웃"January 2, 2006"를 사용하고"Long format: [formatted_result]"를 표시합니다."time12"의 경우: 레이아웃"3:04 PM"를 사용하고"12-hour time: [formatted_result]"를 표시합니다."time24"의 경우: 레이아웃"15:04"를 사용하고"24-hour time: [formatted_result]"를 표시합니다."full"의 경우: 레이아웃"Monday, January 2, 2006 at 3:04 PM"를 사용하고"Full format: [formatted_result]"를 표시합니다."compact"의 경우: 레이아웃"20060102"를 사용하고"Compact format: [formatted_result]"를 표시합니다.
- 통계를 계산하고 표시합니다:
"=== FORMATTING SUMMARY ===""Total formats applied: [number_of_format_requests]""Date components: [year]-[month]-[day]""Time components: [hour]:[minute]"
- 참조 정보를 표시합니다:
"=== REFERENCE DATE INFO ===""Go uses reference date: Mon Jan 2 15:04:05 MST 2006""This represents: January 2nd, 2006 at 3:04:05 PM""Layout patterns arrange these components as needed"
- 완료 메시지를 표시합니다:
"Date formatting completed using Go's layout system"
시간 연산에는 time 패키지를, 입력 문자열 분리에는 strings 패키지를, 문자열을 정수로 변환하는 데는 strconv 패키지를, 형식화된 출력에는 fmt 패키지를 사용하세요. Go의 시간 형식 지정은 Mon Jan 2 15:04:05 MST 2006이라는 기준 날짜를 템플릿으로 사용하며, 이러한 구성 요소를 원하는 패턴으로 배치한다는 점을 기억하세요. 이 챌린지는 동일한 시간 객체에 여러 가지 다른 형식 패턴을 적용해 봄으로써 Go의 독특한 레이아웃 기반 형식 지정 시스템이 어떻게 작동하는지 보여줍니다.
치트 시트
Go는 시간 포맷팅을 위해 고유한 기준 날짜 방식을 사용합니다: Mon Jan 2 15:04:05 MST 2006
time.Time 객체를 포맷하려면, 기준 날짜를 기반으로 한 레이아웃 패턴과 함께 Format 메서드를 사용하세요:
now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // 출력: 2023-10-26일반적인 레이아웃 패턴:
"2006-01-02"- ISO 형식 (YYYY-MM-DD)"01/02/2006"- 미국식 형식 (MM/DD/YYYY)"02/01/2006"- 유럽식 형식 (DD/MM/YYYY)"January 2, 2006"- 긴 형식"3:04 PM"- 12시간제 시간"15:04"- 24시간제 시간"Monday, January 2, 2006 at 3:04 PM"- 전체 형식"20060102"- 압축 형식
핵심은 기준 날짜 구성 요소를 원하는 패턴으로 배치하는 것입니다.
직접 해보기
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// 입력 읽기
var dateInput string
var formatInput string
fmt.Scanln(&dateInput)
fmt.Scanln(&formatInput)
// 콜론을 기준으로 분리하여 날짜 구성 요소 파싱
dateComponents := strings.Split(dateInput, ":")
// 문자열 구성 요소를 정수로 변환
year, _ := strconv.Atoi(dateComponents[0])
month, _ := strconv.Atoi(dateComponents[1])
day, _ := strconv.Atoi(dateComponents[2])
hour, _ := strconv.Atoi(dateComponents[3])
minute, _ := strconv.Atoi(dateComponents[4])
// time.Time 객체 생성
sourceTime := time.Date(year, time.Month(month), day, hour, minute, 0, 0, time.UTC)
// 형식 요청 파싱
formatRequests := strings.Split(formatInput, ",")
// TODO: 아래에 코드를 작성하세요
// 애플리케이션 헤더 표시
// 소스 시간 표시
// 각 형식 요청을 처리하고 형식화된 출력 표시
// 통계 계산 및 표시
// 참조 정보 표시
// 완료 메시지 표시
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.