Go 使用给定的时间戳跟踪当前年份和月份
我有一个格式为Go 使用给定的时间戳跟踪当前年份和月份,go,Go,我有一个格式为181020Z的时间戳,它是一个月的第18天,协调世界时1020 我想把它解析成go,time。time给我的是2019-04-18T10:20:00Z,而不是0000-01-18T10:20:00Z 下面是我用来解析时间的代码 now := time.Now() layout := "200601021504Z" timeField := strconv.Itoa(now.Year()) + strconv.Itoa(int(now.Month())) +
181020Z
的时间戳,它是一个月的第18天,协调世界时1020
我想把它解析成go,time。time
给我的是2019-04-18T10:20:00Z
,而不是0000-01-18T10:20:00Z
下面是我用来解析时间的代码
now := time.Now()
layout := "200601021504Z"
timeField := strconv.Itoa(now.Year()) + strconv.Itoa(int(now.Month())) + fields[1]
fmt.Println(timeField) // 20204181050Z
t, err := time.Parse(layout, timeField)
以下是一种方法:
func main()
now := time.Now()
layout := "021504Z"
t, _ := time.Parse(layout, "181020Z")
t = t.AddDate(now.Year(), int(now.Month()) - 1, 0)
fmt.Println(t) // 2020-04-18T10:20:00Z
关于你的最后一个解决方案——几乎是正确的)。问题是您的布局(
“200601021504Z”
)需要两位数字表示月份(即04
,而不是4月份的4
)。但是now.Month()
返回不带0
填充的月份表示法(即4
)。在字符串前面加上所需的年和月,并相应地修改布局。你必须告诉parse年和月是什么。@mkopriva我已经用最新的代码更新了代码,但它仍然没有给我正确的解释date@bear您的更新解决方案实际上是有效的:。@icza它不是),但只需要一个小补丁。看我的answer@GrigoriyMikhalkin你说得对,我想你是说格式不正确。是的,月份包含两位数字。