[英]golang, time.Parse ( "11:22 PM" ) something that I can do math with
我正在导入许多格式的字段:
09:02 上午
上午 10:02
中午 12:30
04:10 PM
04:50 PM
05:30 PM
我想将字段转换为我可以做算术的东西。 例如,对事件发生的时间进行倒计时。 因此,以微秒甚至几秒为单位保存字段。 我一直在努力争取时间。解析工作......没有乐趣。
fmt.Println(time.Parse("hh:mm", m.Feed.Entry[i].GsxA100Time.T))
返回...
0001-01-01 00:00:00 +0000 UTC 解析时间“07:50 PM”为“hh:mm”:无法将“07:50 PM”解析为“hh:mm”
有什么建议?
time.Parse
的布局字符串不处理"hh:mm"
格式。 在您的情况下,布局字符串宁愿是"03:04 PM"
如您在文档中所见。
要在解析字符串后获得time.Duration
,您可以用参考时间减去您的时间,在您的情况下,我假设"12:00 AM"
。
工作示例:
package main
import (
"fmt"
"time"
)
func main() {
ref, _ := time.Parse("03:04 PM", "12:00 AM")
t, err := time.Parse("03:04 PM", "11:22 PM")
if err != nil {
panic(err)
}
fmt.Println(t.Sub(ref).Seconds())
}
输出:
84120
您是否阅读了 time.Parse 的文档? 一开始就说:
布局通过显示定义为
Mon Jan 2 15:04:05 -0700 MST 2006
的参考时间来定义格式,如果它是值
在包文档的开头有关于布局字符串的更多详细信息。 请注意,您可以省略某些字段(在您的情况下为天、年和时区),然后这些字段将始终获得零值。
所以fmt.Println(time.Parse("3:04 PM", "07:50 PM"))
应该可以工作。
如果您再次查看有关 time 的Parse
方法的文档,您会发现 Go 解析时间的方法与您过去在其他语言中使用的方法完全不同。 要为Parse
函数提供您想要解析的时间布局,您需要将一个特定日期(即Mon Jan 2 15:04:05 -0700 MST 2006
)转换为您提供的布局。 在您的情况下,这将是“03:04 PM”。
完整代码: fmt.Println(time.Parse("03:04 PM", m.Feed.Entry[i].GsxA100Time.T))
以防万一有人使用纪元时间可以使用它,
func convert (in int64) string {
u := time.Unix(in/1000, in%1000)
ampm := "AM"
if u.Hour()/12 ==1 { ampm = "PM" }
th := u.Hour()%12
hh := strconv.Itoa(th)
if th < 10 { hh = "0" + hh }
tm := u.Minute()
mm := strconv.Itoa(tm)
if tm < 10 { mm = "0" + mm }
return hh + ":" + mm + " " + ampm
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.