我正在尝试将时间戳2018-12-17T15:03:49.000 + 0000转换为golang中的ISO格式,但出现错误 cannot parse "+0000" as "Z07:00"
这是我尝试过的
ts, err := time.Parse(time.RFC3339, currentTime)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
当心,未来还有很长的路要走
(tl; dr)使用:
ts, err := time.Parse("2006-01-02T15:04:05-0700", currentTime)
ts.Format(time.RFC3339)
Run Code Online (Sandbox Code Playgroud)
我真的很喜欢go文档,您应该:)
全部来自https://golang.org/pkg/time/#pkg-constants
RFC3339 = "2006-01-02T15:04:05Z07:00"
Run Code Online (Sandbox Code Playgroud)
某些有效的布局对于time.Parse来说是无效的时间值,这是因为格式,例如_表示空格填充,Z表示区域信息
这意味着您无法+0000使用layout进行解析Z07:00。
也:
布局中使用的参考时间是特定时间:
Run Code Online (Sandbox Code Playgroud)Mon Jan 2 15:04:05 MST 2006这是Unix时间1136239445。由于MST是GMT-0700,因此参考时间可以认为是
Run Code Online (Sandbox Code Playgroud)01/02 03:04:05PM '06 -0700
您可以按以下方式解析数字时区偏移量格式:
Run Code Online (Sandbox Code Playgroud)-0700 ±hhmm -07:00 ±hh:mm -07 ±hh
或将格式中的符号替换为Z:
Run Code Online (Sandbox Code Playgroud)Z0700 Z or ±hhmm Z07:00 Z or ±hh:mm Z07 Z or ±hh
从这个例子中https://play.golang.org/p/V9ubSN6gTdG
//如果布局中的分数为9s,则尾随零将被丢弃。
Run Code Online (Sandbox Code Playgroud)do("9s for fraction", "15:04:05.99999999", "11:06:39.1234")
因此,您可以将其解析为:
ts, err := time.Parse("2006-01-02T15:04:05.999-0700", currentTime)
Run Code Online (Sandbox Code Playgroud)
另外,从文档
小数点后跟一个或多个零表示小数秒,打印到给定的小数位数。小数点后跟一个或多个9代表小数秒,打印到给定的小数位数,并删除了尾随的零。解析时(仅),即使布局不 表示其存在,输入也可能在秒字段之后紧跟着一个小数秒字段。在那种情况下,小数点后跟一个最大的数字序列被解析为小数秒。
这意味着您可以忽略布局中的小数点,它将正确解析
ts, err := time.Parse("2006-01-02T15:04:05-0700", currentTime)
Run Code Online (Sandbox Code Playgroud)
为了节省时间,UTC只需写ts.UTC()
并将其格式化为RFC3339,您可以使用
ts.Format(time.RFC3339)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
游乐场:https : //play.golang.org/p/vfERDm_YINb
这个怎么样?
ts, err := time.Parse("2006-01-02T15:04:05.000+0000", currentTime)
Run Code Online (Sandbox Code Playgroud)
从那时起。RFC3339 只是2006-01-02T15:04:05Z07:00
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |