如何在Golang中创建YYYY-MM-DD格式的从开始到结束的日期范围?

5vf7fwbs  于 2022-12-20  发布在  Go
关注(0)|答案(2)|浏览(100)

假设我们的输入是start_date=2022-01-01end_date=2022-01-05,如何得到如下的输入:

2022-01-01
2022-01-02
2022-01-03
2022-01-04

我可以使用time.Parse解析开始和结束,使用.Sub获得中间的日期,然后迭代范围并创建字符串日期。我想知道是否有任何方法或更好的解决方案在Go中创建日期范围?

wfauudbj

wfauudbj1#

您可以使用:

const (
    layout = "2006-01-02"
)

func main() {
    startDate, _ := time.Parse(layout, "2022-01-01")
    endDate, _ := time.Parse(layout, "2022-01-05")

    for date := startDate; date.Before(endDate); date = date.AddDate(0, 0, 1) {
        fmt.Println(date.Format(layout))
    }
}

这将为您提供:

2022-01-01
2022-01-02
2022-01-03
2022-01-04

Full example

wgxvkvu9

wgxvkvu92#

Go语言并不使用yyyy-mm-dd布局来格式化时间,而是格式化一个特殊的布局参数

    • 2006年1月2日星期一15:04:05 MST**

时间或日期的格式应与此相同。(此日期写成01/02 03:04:05PM '06 -0700时更容易记住。)

const (
    layoutISO = "2006-01-02"
    layoutUS  = "January 2, 2006"
)
date := "1999-12-31"
t, _ := time.Parse(layoutISO, date)
fmt.Println(t)                  // 1999-12-31 00:00:00 +0000 UTC
fmt.Println(t.Format(layoutUS)) // December 31, 1999

该功能

      • time. Parse**解析日期字符串,并且
      • 格式**设置时间格式。时间。

他们的签名如下:

func Parse(layout, value string) (Time, error)
  func (t Time) Format(layout string) string

你可以使用这个日期范围

const (
    layoutISO = "2006-01-02"
    layoutUS  = "January 2, 2006"
)

func main() {
    date := "1999-12-31"
    t, _ := time.Parse(layoutISO, date)
    fmt.Println(t)                  // 1999-12-31 00:00:00 +0000 UTC
    fmt.Println(t.Format(layoutUS)) // December 31, 1999
    
    
    startDate, _ := time.Parse(layoutISO, "2022-01-01")
    endDate, _ := time.Parse(layoutISO, "2022-01-05")
    for date := startDate; date.Before(endDate); date = date.AddDate(0, 0, 1) {
        fmt.Println(date.Format(layoutISO))
    }

}

相关问题