我正在尝试将时间戳2018-12-17T15:03:49.000 + 0000转换为golang中的ISO格式,但遇到错误cannot parse "+0000" as "Z07:00"
这是我尝试过的
ts, err := time.Parse(time.RFC3339, currentTime)
有什么想法吗?
答案 0 :(得分:3)
当心,很长的答案
(tl; dr)使用:
ts, err := time.Parse("2006-01-02T15:04:05-0700", currentTime)
ts.Format(time.RFC3339)
我真的很喜欢go文档,您应该这样做:)
全部来自https://golang.org/pkg/time/#pkg-constants
RFC3339 = "2006-01-02T15:04:05Z07:00"
某些有效的布局对于time.Parse来说是无效的时间值,原因是 格式,例如_表示空格填充,Z表示区域信息
这意味着您无法使用布局+0000
来解析Z07:00
。
也:
布局中使用的参考时间为特定时间:
Mon Jan 2 15:04:05 MST 2006
,这是Unix时间1136239445。由于MST是GMT-0700,因此参考 时间可以认为是
01/02 03:04:05PM '06 -0700
您可以按以下方式解析数字时区偏移格式:
-0700 ±hhmm -07:00 ±hh:mm -07 ±hh
或用Z
替换格式中的符号:
Z0700 Z or ±hhmm Z07:00 Z or ±hh:mm Z07 Z or ±hh
从此转到示例https://play.golang.org/p/V9ubSN6gTdG
//如果布局中的分数为9s,则尾随的零将被丢弃。
do("9s for fraction", "15:04:05.99999999", "11:06:39.1234")
因此您可以将其解析为:
ts, err := time.Parse("2006-01-02T15:04:05.999-0700", currentTime)
另外,来自文档
小数点后跟一个或多个零表示小数 第二,打印到给定的小数位数。小数点 后跟一个或多个9代表小数秒,已打印 到给定的小数位数,并删除了尾随零。 解析时(仅),输入内容可能包含小数秒字段 在秒数字段后紧接即使布局不正确 表示其存在。 在这种情况下,小数点后跟一个 最大位数序列被解析为小数秒。
这意味着您可以忽略布局中的小数点,它将正确解析
ts, err := time.Parse("2006-01-02T15:04:05-0700", currentTime)
要获取UTC
中的时间,只需写ts.UTC()
并且可以将其格式化为RFC3339,可以使用
ts.Format(time.RFC3339)
currentTime := "2018-12-17T17:02:04.123+0530"
ts, err := time.Parse("2006-01-02T15:04:05-0700", currentTime)
if err != nil {
panic(err)
}
fmt.Println("ts: ", ts)
fmt.Println("ts in utc: ", ts.UTC())
fmt.Println("RFC3339: ", ts.Format(time.RFC3339))
// output
// ts: 2018-12-17 17:02:04.123 +0530 +0530
// ts in utc: 2018-12-17 11:32:04.123 +0000 UTC
// RFC3339: 2018-12-17T17:02:04+05:30
答案 1 :(得分:1)
怎么样?
getCalendarById
从那时开始。RFC3339只是ts, err := time.Parse("2006-01-02T15:04:05.000+0000", currentTime)