英文:
How to create a date range in the format of YYYY-MM-DD from start to end in Golang?
问题
假设我们的输入是 start_date=2022-01-01
和 end_date=2022-01-05
。我该如何得到以下形式的输入:
2022-01-01
2022-01-02
2022-01-03
2022-01-04
我可以使用 time.Parse
解析起始日期和结束日期,使用 .Sub
获取它们之间的天数,然后遍历这个范围并创建字符串日期。我想知道在 Go
中是否有任何方法或更好的解决方案来创建日期范围?
英文:
Let's say our inputs are start_date=2022-01-01
and end_date=2022-01-05
. How I can get an input like below:
2022-01-01
2022-01-02
2022-01-03
2022-01-04
I'm able to parse start and end using time.Parse
and get the days in between using .Sub
and then iterating over the range and create string dates.
I was wondering if there is any method or better solution for date range creation in Go
?
答案1
得分: 1
你可以使用以下代码:
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
英文:
You can use:
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))
}
}
This will give you:
2022-01-01
2022-01-02
2022-01-03
2022-01-04
答案2
得分: 0
Go语言不使用yyyy-mm-dd的格式来格式化时间。相反,你需要使用一个特殊的格式参数来格式化时间或日期。(当以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
用于解析日期字符串,而Format
用于格式化time.Time
对象。它们的签名如下:
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))
}
}
英文:
Go doesn’t use yyyy-mm-dd layout to format a time. Instead, you format a special layout parameter
Mon Jan 2 15:04:05 MST 2006
the same way as the time or date should be formatted. (This date is easier to remember when written as 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
The function
-
time.Parse parses a date string, and
-
Format formats a time.Time.
They have the following signatures:
func Parse(layout, value string) (Time, error)
func (t Time) Format(layout string) string
you can use this for date range
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))
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论