time 패키지 핵심
시간, 기간 및 형식 다루기
time 패키지 핵심은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
time.Time — 핵심 타입
time 패키지의 중심 타입은 time.Time입니다. time.Now()로 현재 시간을 가져옵니다:
package main
import ("fmt"; "time")
func main() {
now := time.Now()
fmt.Println(now) // 2024-01-15 10:30:00.123456789 +0000 UTC
fmt.Println(now.Year()) // 2024
fmt.Println(now.Month()) // January
fmt.Println(now.Day()) // 15
fmt.Println(now.Hour()) // 10
fmt.Println(now.Minute()) // 30
fmt.Println(now.Weekday()) // Monday
}time.Duration
time.Duration은 경과 시간을 나노초 단위로 나타냅니다. 읽기 쉽게 타입이 지정된 상수를 사용합니다:
package main
import ("fmt"; "time")
func main() {
d := 2*time.Hour + 30*time.Minute + 15*time.Second
fmt.Println(d) // 2h30m15s
fmt.Println(d.Hours()) // 2.504166...
fmt.Println(d.Minutes()) // 150.25
fmt.Println(d.Seconds()) // 9015
fmt.Println(d.Milliseconds()) // 9015000
}time.Add 및 time.Sub
시간에 기간을 더하거나 두 시간의 차를 계산하여 기간을 얻습니다:
package main
import ("fmt"; "time")
func main() {
now := time.Now()
tomorrow := now.Add(24 * time.Hour)
fmt.Println(tomorrow.Format("2006-01-02"))
deadline := now.Add(30 * time.Minute)
remaining := time.Until(deadline) // alias for deadline.Sub(now)
fmt.Printf("%.0f minutes left\n", remaining.Minutes())
}시간 형식 지정 및 파싱
Go는 기준 시간 Mon Jan 2 15:04:05 MST 2006을 형식 템플릿으로 사용합니다(값 1~7을 순서대로 사용합니다):
package main
import ("fmt"; "time")
func main() {
now := time.Now()
// Format
fmt.Println(now.Format("2006-01-02")) // 2024-01-15
fmt.Println(now.Format("02/01/2006 15:04:05")) // 15/01/2024 10:30:00
fmt.Println(now.Format(time.RFC3339)) // 2024-01-15T10:30:00Z
fmt.Println(now.Format(time.Kitchen)) // 10:30AM
}time.Parse — 문자열 파싱
동일한 기준 템플릿을 사용하여 문자열을 time.Time으로 파싱합니다:
package main
import ("fmt"; "time")
func main() {
s := "2024-01-15"
t, err := time.Parse("2006-01-02", s)
if err != nil {
fmt.Println("parse error:", err)
return
}
fmt.Println(t.Year(), t.Month(), t.Day()) // 2024 January 15
// Parse RFC3339 (ISO 8601):
t2, _ := time.Parse(time.RFC3339, "2024-01-15T10:30:00Z")
fmt.Println(t2)
}time.Sleep 및 타이머
time.Sleep으로 실행을 일시 중지하고, time.NewTimer로 일회성 타이머를 만듭니다:
package main
import ("fmt"; "time")
func main() {
start := time.Now()
time.Sleep(100 * time.Millisecond)
fmt.Printf("slept for %v\n", time.Since(start))
// One-shot timer
timer := time.NewTimer(200 * time.Millisecond)
<-timer.C // blocks until timer fires
fmt.Println("timer fired")
}반복 이벤트를 위한 time.Ticker
time.NewTicker는 일정한 간격으로 해당 채널에 값을 보냅니다:
package main
import ("fmt"; "time")
func main() {
ticker := time.NewTicker(500 * time.Millisecond)
defer ticker.Stop() // always stop to avoid goroutine leak
for i := 0; i < 3; i++ {
t := <-ticker.C
fmt.Println("tick at", t.Format("15:04:05.000"))
}
}time.Since 및 time.Until
경과 시간과 이벤트까지 남은 시간을 편리하게 측정할 수 있는 방법입니다:
package main
import ("fmt"; "time")
func benchmark(fn func()) time.Duration {
start := time.Now()
fn()
return time.Since(start) // = time.Now().Sub(start)
}
func main() {
d := benchmark(func() { time.Sleep(50 * time.Millisecond) })
fmt.Printf("took %v\n", d)
deadline := time.Now().Add(5 * time.Minute)
fmt.Printf("%.0f minutes remaining\n", time.Until(deadline).Minutes())
}시간대
Go에서는 time.Location을 사용하여 시간대를 처리합니다. time.LoadLocation으로 시간대를 불러옵니다:
package main
import ("fmt"; "time")
func main() {
utc := time.Now().UTC()
fmt.Println(utc)
loc, err := time.LoadLocation("America/New_York")
if err != nil { panic(err) }
nyTime := utc.In(loc)
fmt.Println(nyTime)
// Compare times — always in UTC internally
fmt.Println(utc.Equal(nyTime)) // true — same instant
}time.Unix — Unix 타임스탬프
time.Time과 Unix 타임스탬프 사이를 변환합니다:
package main
import ("fmt"; "time")
func main() {
now := time.Now()
unix := now.Unix() // seconds since epoch
unixMilli := now.UnixMilli() // milliseconds
unixNano := now.UnixNano() // nanoseconds
fmt.Println(unix, unixMilli, unixNano)
// Convert back:
t := time.Unix(unix, 0)
fmt.Println(t.Format(time.RFC3339))
}빠른 확인
Go는 어떤 기준 시간을 형식 템플릿으로 사용하나요?
복습: time 패키지
요약:
time.Now()— 현재 시간이며,.Year(),.Month()등으로 필드에 접근합니다time.Duration— 나노초 단위이며,time.Hour,time.Minute등을 사용합니다t.Format(layout)/time.Parse(layout, s)— 형식에는 기준 시간2006-01-02 15:04:05을 사용합니다- 경과 시간과 남은 시간에는
time.Since/time.Until을 사용합니다 - 주기적인 이벤트에는
time.NewTicker를 사용하며, 항상defer Stop()을 실행합니다
자주 묻는 질문
“time 패키지 핵심” 강의는 무료인가요?
네 — “time 패키지 핵심” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“time 패키지 핵심”에서 뭘 배우나요?
시간, 기간 및 형식 다루기 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Go Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“time 패키지 핵심” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.