time
time 패키지는 시간과 달력과 관련된 함수와 메서드를 제공합니다.
time.Now() 함수는 현재 시간을 가져올 수 있습니다.
func Now() Timenow := time.Now()
fmt.Println(now)
//2022-11-17 10:00:18.6983438 +0800 CST m=+0.007095001반환되는 데이터 유형은 Time 구조체이며, 매우 많은 시간 조작 메서드를 포함하고 있습니다.
func (t *Time) nsec() int32 //나노초
func (t *Time) sec() int64 //초
func (t *Time) unixSec() //Unix 시간 형식의 초 반환
func (t *Time) addSec(d int64) //초 증가
func (t *Time) setLoc(loc *Location) //지역 설정
func (t *Time) stripMono() //시간의 단조 시계 읽기 제거
func (t Time) After(u Time) //한 시간이 그 이후인지 판단
func (t Time) Before(u Time) bool //한 시간이 그 이전인지 판단
func (t Time) Equal(u Time) bool //두 시간이 동일한 순간을 나타내는지 판단
func (t Time) Sub(u Time) Duration //두 시간의 차이 계산
func (t Time) Add(d Duration) Time //시간 간격 증가시간 단위
time 패키지에는 기본 시간 단위 상수가 있습니다.
const (
minDuration Duration = -1 << 63
maxDuration Duration = 1<<63 - 1
)
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)이들의 유형은 time.Duration 이며, 최소 단위는 나노초이고 최대는 시간입니다.
포맷팅
시간 유형은 포맷팅되어 출력될 수 있지만, Go 에서 포맷팅 템플릿은 일반적인 yyyy-mm-dd 형식이 아니라 Go 의 탄생 시간을 템플릿으로 사용한다는 점에 유의해야 합니다. Go 가 탄생한 시간은 2006 년 1 월 2 일 오후 3 시 4 분입니다.
예시
now := time.Now()24 시간 형식 출력
fmt.Println(now.Format("2006-01-02 15:04:05 Monday Jan"))
//2022-11-17 10:44:48 Thursday Nov날짜만 출력
fmt.Println(now.Format("2006-01-02"))
//2022-11-1712 시간제 시간만 출력
fmt.Println(now.Format("15:04:05 PM"))
//10:48:47 AM시간 파싱
일반적으로 문자열 시간을 특정 형식으로 Go 의 시간 구조체로 변환해야 하는 요구사항이 있습니다. 이제 바로 그 작업을 수행하겠습니다.
func main() {
location, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
fmt.Println(err)
return
}
inLocation, err := time.ParseInLocation("2006/01/02", "2012/10/12", location)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(inLocation.String())
}최종 출력
2012-10-12 00:00:00 +0800 CSTTimer
Timer 는 타이머로, channel 을 외부에 노출합니다. 지정된 시간이 되면 channel 이 메시지를 받고 닫힙니다.
func NewTimer(d Duration) *Timertime.NewTimer() 를 통해 새 타이머를 생성할 수 있습니다.
func main() {
timer := time.NewTimer(time.Second)
defer timer.Stop()
select {
case t := <-timer.C:
fmt.Println(t)
}
}2023-09-25 21:25:03.5696803 +0800 CST m=+1.007908001timer 사용 후 즉시 닫아야 합니다.
Ticker
Ticker 는 타이머로, timer 와의 차이점은 timer 가 일회성인 반면 Ticker 는 정기적으로 트리거된다는 점입니다.
func NewTicker(d Duration) *Tickertime.NewTicker() 를 통해 새 타이머를 생성할 수 있습니다.
func main() {
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for i := 0; i < 3; i++ {
select {
case t := <-ticker.C:
fmt.Println(t)
}
}
}2023-09-25 21:29:20.4429256 +0800 CST m=+1.009508401
2023-09-25 21:29:21.4512075 +0800 CST m=+2.017790301
2023-09-25 21:29:22.4501592 +0800 CST m=+3.016742001마찬가지로 ticker 사용 후에도 즉시 닫아야 합니다.
sleep
time.Sleep() 는 현재 goroutine 을 일정 시간 동안 대기 상태로 만듭니다. 이 기간 동안 goroutine 은 블로킹되며 실행 상태가 될 때까지 대기합니다.
func Sleep(d Duration)func main() {
start := time.Now()
fmt.Println(start)
time.Sleep(time.Second * 2)
end := time.Now()
fmt.Println(end)
}2023-09-25 21:36:35.7229057 +0800 CST m=+0.001627901
2023-09-25 21:36:37.7347742 +0800 CST m=+2.013496401위 프로그램은 start 출력 후 2 초간 블로킹된 다음 end 를 출력합니다.
