繁体   English   中英

golang, time.Parse ( "11:22 PM" ) 一些我可以做数学的东西

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM