Golang中如何将日期时间字符串转换为RFC3339格式
Golang中如何将日期时间字符串转换为RFC3339格式 你好,
我是Go语言的新手,想请教一下这个问题。
如何将格式为“2005-06-13 04:40:51”的日期字符串转换为RFC3339格式的UTC日期字符串,例如“2005-06-13T04:40:51.000Z”?
尝试了以下代码:
createdOn, err := time.Parse("2006-01-02 03:04:05", p.CreatedOn)
fmt.Println(err.Error())
result := createdOn.Format(time.RFC3339)
但出现了错误:
CreatedOn: 1986-12-03 22:01:35
parsing time "1986-12-03 22:01:35": hour out of range
根据下面的一个建议,我将小时改为了24小时制格式:
createdOn, _ := time.Parse("2006-01-02 15:04:05", p.CreatedOn)
self.CreatedOn = createdOn.Format(time.RFC3339)
例如,这将生成格式如下的日期字符串:
1970-02-13T10:31:13Z
如何让它变成 1970-02-13T10:31:13.000Z 这种格式呢?
更多关于Golang中如何将日期时间字符串转换为RFC3339格式的实战教程也可以访问 https://www.itying.com/category-94-b0.html
非常感谢,我会进一步调查。
更多关于Golang中如何将日期时间字符串转换为RFC3339格式的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
将小时写作15而不是03。
看起来有 time.RFC3339 格式只包含秒,以及 time.RFC3339Nano 格式包含纳秒,但我没有看到介于两者之间的格式。你可能需要定义自己的格式:
RFC3339Milli = "2006-01-02T15:04:05.000Z07:00"
非常感谢!
是的,那样就解决问题了!
createdOn, _ := time.Parse("2006-01-02 15:04:05", p.CreatedOn)
self.CreatedOn = createdOn.Format(time.RFC3339)
例如,这将得到一个格式如下的日期字符串:
1970-02-13T10:31:13Z
如何让它变成 1970-02-13T10:31:13.000Z 这种格式呢?
要生成带有毫秒部分的RFC3339格式(如1970-02-13T10:31:13.000Z),可以使用自定义格式字符串。time.RFC3339常量对应的是2006-01-02T15:04:05Z07:00格式,不会包含毫秒。
以下是解决方案:
package main
import (
"fmt"
"time"
)
func main() {
// 原始日期字符串
dateStr := "1970-02-13 10:31:13"
// 解析为time.Time
t, err := time.Parse("2006-01-02 15:04:05", dateStr)
if err != nil {
panic(err)
}
// 转换为UTC时区
t = t.UTC()
// 使用自定义格式包含毫秒部分
rfc3339WithMillis := t.Format("2006-01-02T15:04:05.000Z")
fmt.Println("原始字符串:", dateStr)
fmt.Println("RFC3339带毫秒:", rfc3339WithMillis)
// 输出: 1970-02-13T10:31:13.000Z
}
如果需要在解析时直接指定时区为UTC,可以这样写:
package main
import (
"fmt"
"time"
)
func main() {
dateStr := "1986-12-03 22:01:35"
// 指定时区为UTC进行解析
loc, _ := time.LoadLocation("UTC")
t, err := time.ParseInLocation("2006-01-02 15:04:05", dateStr, loc)
if err != nil {
panic(err)
}
rfc3339WithMillis := t.Format("2006-01-02T15:04:05.000Z")
fmt.Println("结果:", rfc3339WithMillis)
// 输出: 1986-12-03T22:01:35.000Z
}
对于你的具体代码,可以这样修改:
createdOn, err := time.Parse("2006-01-02 15:04:05", p.CreatedOn)
if err != nil {
// 处理错误
fmt.Println("解析错误:", err)
return
}
// 转换为UTC并格式化为带毫秒的RFC3339
self.CreatedOn = createdOn.UTC().Format("2006-01-02T15:04:05.000Z")
格式字符串中的.000表示三位毫秒数。如果需要其他精度的毫秒数,可以调整:
.000- 三位毫秒(如.123).000000- 六位微秒(如.123456).000000000- 九位纳秒(如.123456789)

