go - 在 Go 中将时间戳从一种有效的 RFC3339 格式转换为另一种格式
问题描述
我有这种格式的时间戳字符串,2020-01-17T14:41:56.393+0530
我希望它们转换成这种格式2019-01-18T04:32:03Z
该 godoc 上的 time.Parse 方法文档说这些都是有效的 RFC3339 格式,但是如何将它们从这种形式转换为 Z 形式?
实际上我想做的是找出这种格式的某个时间戳是否2020-01-17T14:41:56.393+0530
位于 z 格式的两个时间戳的范围内2019-01-18T04:32:03Z
解决方案
都是有效的 RFC3339 格式
time 包将 RFC3339 定义为:
RFC3339 = "2006-01-02T15:04:05Z07:00"
所以2020-01-17T14:41:56.393+0530
无效(时区中没有冒号)。有关Go 对此的处理是否符合RFC的讨论,请参阅此问题。
将它们从这种形式转换为 Z 形式
你不需要 - 一旦你转换成一个time.Time
包会为你处理时区。例如:
checkTime, err := time.Parse("2006-01-02T15:04:05Z0700", "2020-01-17T14:41:56.393+0530")
if err != nil {
panic(err)
}
startRange, err := time.Parse(time.RFC3339, "2020-01-18T02:32:03Z")
if err != nil {
panic(err)
}
endRange, err := time.Parse(time.RFC3339, "2020-01-18T04:32:03Z")
if err != nil {
panic(err)
}
fmt.Printf("check: %v start: %v end: %v", checkTime, startRange, endRange)
if !startRange.After(checkTime) && !endRange.Before(checkTime) {
fmt.Println("Check 1 in range")
}
checkTime, err = time.Parse(time.RFC3339, "2020-01-18T09:41:56.393+05:30")
if err != nil {
panic(err)
}
if !startRange.After(checkTime) && !endRange.Before(checkTime) {
fmt.Println("Check 2 in range")
}
fmt.Printf("check: %v start: %v end: %v", checkTime.Local(), startRange.Local(), endRange.Local())
推荐阅读
- python - 即使在无错误执行 df.astype('float64') 后,熊猫也不会将对象 dtype 转换为 float64
- python - 是否可以让 python 脚本将自身导出到文件中
- javascript - Vue如何解析来自Api的textarea字符串中的换行符?
- css - 异步加载 CSS 的最先进方法,但它增加了 CLS。如何减少 CLS?
- ios - Swift - 根据过滤器中的条件删除/更新领域
- python - 使用转换的熊猫分组列表聚合失败并出现键错误
- python-3.x - 通过 discord.py bot 控制 custrom 脚本
- flutter - Flutter web GestureDetector:检测鼠标滚轮事件
- reactjs - 是否有任何用于反应材料-ui 芯片的滑块?
- node.js - 在 node.js 中运行嵌套的 mysql 查询