Golang에서 날짜와 시간 처리
Golang `time` 패키지를 사용하여 날짜와 시간을 처리하는 방법들을 알아보겠습니다.
1. 날짜와 시간 생성
// 현재 시간
now := time.Now()
// 사용자 지정 시간 (UTC 사용)
customTime := time.Date(2023, 7, 26, 15, 30, 0, 0, time.UTC)
2. 날짜 계산
// 24시간 후
futureTime := now.Add(24 * time.Hour)
// 1달 전
pastTime := now.AddDate(0, -1, 0)
3. 날짜 포맷팅
Go의 시간 포맷팅은 2006년 1월 2일 오후 3시 4분 5초(15:04:05)를 레이아웃으로 사용합니다.
// YYYY-MM-DD HH:MM:SS
formatted := now.Format("2006-01-02 15:04:05")
// YYYY.MM.DD
formattedDate := now.Format("2006.01.02")
// YYYY/MM/DD
formattedDateSlash := now.Format("2006/01/02")
// 12시간 형식
formatted12Hour := now.Format("2006/01/02 03:04:05 PM")
4. 문자열을 시간으로 파싱
t, err := time.Parse("2006-01-02", "2023-07-26")
if err != nil {
// 에러 처리
}
5. 시간대 처리
loc, _ := time.LoadLocation("Asia/Seoul")
seoulTime := now.In(loc)
6. 날짜 비교
referenceDate := time.Date(2023, 7, 26, 0, 0, 0, 0, time.UTC)
// 이전 날짜 비교
if now.Before(referenceDate) {
fmt.Println("현재 시간은 기준 날짜보다 이전입니다.")
}
// 이후 날짜 비교
if now.After(referenceDate) {
fmt.Println("현재 시간은 기준 날짜보다 이후입니다.")
}
// 같은 날짜 비교
if now.Year() == referenceDate.Year() && now.YearDay() == referenceDate.YearDay() {
fmt.Println("현재 날짜는 기준 날짜와 같은 날입니다.")
}
// 시간 차이 계산
duration := now.Sub(referenceDate)
fmt.Printf("기준 날짜로부터 %v가 지났습니다.\n", duration)
// 특정 기간 내 확인
oneWeekAgo := now.AddDate(0, 0, -7)
if referenceDate.After(oneWeekAgo) && referenceDate.Before(now) {
fmt.Println("기준 날짜는 지난 1주일 내에 있습니다.")
}
7. UTC (Coordinated Universal Time) 사용의 중요성
`time.UTC`를 사용하는 것은 시간 처리에 있어 매우 중요합니다. UTC를 사용하는 주요 이유는 다음과 같습니다
1. 표준화된 기준 시간: UTC는 전 세계적으로 사용되는 표준 시간입니다.
2. 일광 절약 시간 문제 해결: UTC는 일광 절약 시간(서머타임)의 영향을 받지 않습니다.
3. 시간대 변환 용이: UTC를 기준으로 다른 시간대로의 변환이 쉽습니다.
4. 일관성 유지: 특히 분산 시스템이나 국제적인 애플리케이션에서 시간 데이터의 일관성을 유지합니다.
예시
// UTC 시간 생성
utcTime := time.Date(2023, 7, 26, 15, 30, 0, 0, time.UTC)
fmt.Println("UTC 시간:", utcTime)
// 로컬 시간대로 변환
localTime := utcTime.Local()
fmt.Println("로컬 시간:", localTime)
// 특정 시간대(예: 서울)로 변환
loc, _ := time.LoadLocation("Asia/Seoul")
seoulTime := utcTime.In(loc)
fmt.Println("서울 시간:", seoulTime)
시간대를 명시적으로 지정하지 않으면, Go는 기본적으로 시스템의 로컬 시간대를 사용합니다. 하지만 시스템 설정에 따라 달라질 수 있어 예측 불가능한 결과를 초래할 수 있습니다. 따라서 `time.UTC`를 사용하여 명확하고 일관된 시간 표현을 보장하는 것이 좋을것 같습니다.
정리
- 시간 생성: time.Now()로 현재 시간, time.Date()로 사용자 지정 시간 생성
- 날짜 계산: Add(), AddDate() 메서드로 시간 더하기/빼기
- 포맷팅: "2006-01-02 15:04:05" 형식의 레이아웃 사용
- 파싱: time.Parse()로 문자열을 시간으로 변환
- 시간대: time.LoadLocation()으로 시간대 설정, In() 메서드로 변환
- 비교: Before(), After(), Equal() 메서드로 시간 비교
- UTC 사용: 일관성과 정확성을 위해 UTC 사용 권장
'프로그래밍 > Golang' 카테고리의 다른 글
Golang 캡슐화, 임베딩 (0) | 2024.08.09 |
---|---|
Golang 함수 []any(슬라이스 파라미터) 와 ...any(가변인자) (0) | 2024.08.08 |
Golang Error 인터페이스 (0) | 2024.08.07 |
Golang에서 문자열 자르기 (0) | 2024.08.07 |
Golang 정수 타입과 아키텍처 의존성 (0) | 2024.08.06 |