Go 中如何解析日期字串

Suraj Joshi 2023年12月11日
  1. Go 中日期和時間的表示
  2. 在 Go 中解析日期字串
Go 中如何解析日期字串

日期解析是程式設計中遇到的最常見的任務之一。Go 使用標準日期,這與其他使用程式碼表示日期/時間字串表示形式的部分的程式語言不同。Go 中的解析是在 time 包中的 Parse 和 Format 函式的幫助下完成的。

Go 中日期和時間的表示

為了解析 Go 中的日期,我們使用了一種稱為佈局 layout 的方法。Go 中有一個標準時間,在 Go 中解析日期時我們需要記住:

Mon Jan 2 15:04:05 MST 2006

是 2006 年 1 月 2 日下午 3:04:05 UTC-0700。

在 Go 中解析日期字串

為了解析日期字串,我們將此佈局傳遞給 time.Parse 函式。我們使用實時格式,而沒有在 parse 函式中使用字母指定日期,這使 parse 函式非常有趣。

time.Parse 函式採用由時間格式佔位符作為第一個引數和代表時間的實際格式化字串作為第二個引數的佈局。

package main

import (
    "fmt"
    "time"
)

func main() {
    timeT, _ := time.Parse("2006-01-02", "2020-04-14")
    fmt.Println(timeT)

    timeT, _ = time.Parse("06-01-02", "20-04-14")
    fmt.Println(timeT)

    timeT, _ = time.Parse("2006-Jan-02", "2020-Apr-14")
    fmt.Println(timeT)

    timeT, _ = time.Parse("2006-Jan-02 Monday 03:04:05", "2020-Apr-14 Tuesday 23:19:25")
    fmt.Println(timeT)

    timeT, _ = time.Parse("2006-Jan-02 Monday 03:04:05 PM MST -07:00", "2020-Apr-14 Tuesday 11:19:25 PM IST +05:30")
    fmt.Println(timeT)
}

輸出:

2020-04-14 00:00:00 +0000 UTC
2020-04-14 00:00:00 +0000 UTC
2020-04-14 00:00:00 +0000 UTC
0001-01-01 00:00:00 +0000 UTC
2020-04-14 23:19:25 +0530 IST

Go 在其 package 中具有一些預定義的時間佈局常量。

常量 Layout
ANSIC "Mon Jan _2 15:04:05 2006"
UnixDate "Mon Jan _2 15:04:05 MST 2006"
RubyDate "Mon Jan 02 15:04:05 -0700 2006"
RFC822 "02 Jan 06 15:04 MST"
RFC822Z "02 Jan 06 15:04 -0700"
RFC850 "Monday, 02-Jan-06 15:04:05 MST"
RFC1123 "Mon, 02 Jan 2006 15:04:05 MST"
RFC1123Z "Mon, 02 Jan 2006 15:04:05 -0700"
RFC3339 "2006-01-02T15:04:05Z07:00"
RFC3339Nano "2006-01-02T15:04:05.999999999Z07:00"
Stamp "3:04PM"
StampMilli "Jan _2 15:04:05.000"
StampMicro "Jan _2 15:04:05.000000"
StampNano "Jan _2 15:04:05.000000000"

我們可以使用上述預定義的常量而不是佈局字串來解析日期時間。

package main

import (
    "fmt"
    "time"
)

func main() {
    timeT, _ := time.Parse(time.RFC3339, "2020-04-15T13:45:26Z")
    fmt.Println(timeT)
}

輸出:

2020-04-15 13:45:26 +0000 UTC

如果我們使用的是 time.Time 型別,則可以使用格式函式將其轉換為字串。

package main

import (
    "fmt"
    "time"
)

func main() {
    input := "2020-04-14"
    layout := "2006-01-02"
    t, _ := time.Parse(layout, input)
    fmt.Println(t)
    fmt.Println(t.Format("02-Jan-2006"))

}

輸出:

2020-04-14 00:00:00 +0000 UTC
14-Apr-2020
作者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相關文章 - Go String