golang,time.Parse(“11:22 PM”)我可以用数学做的事情

时间:2017-07-05 11:10:46

标签: go time

我正在导入许多格式的字段:

09:02 AM 上午10:02 下午12:30 04:10 PM
下午04:50 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”

有什么建议吗?

4 个答案:

答案 0 :(得分:4)

time.Parse的布局字符串无法处理"hh:mm"格式。在您的情况下,您可以在the documentation中看到布局字符串"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

Playground

答案 1 :(得分:2)

您是否阅读过time.Parse的文档?它在一开始就说:

  

布局通过显示参考时间来定义格式,   定义为Mon Jan 2 15:04:05 -0700 MST 2006将被解释   如果它是值

在包文档的开头,有关于布局字符串的更多详细信息。请注意,您可以省略某些字段(在您的情况下为days,years和timezeone),然后这些字段将始终为零值。

所以fmt.Println(time.Parse("3:04 PM", "07:50 PM"))应该有用。

答案 2 :(得分:0)

如果您再次查看有关时间Parse方法的文档,您会发现Go解析时间的方法完全不同于您曾经使用过其他语言。要提供Parse函数,您要解析的时间布局需要将一个特定日期(Mon Jan 2 15:04:05 -0700 MST 2006)转换为您提供的布局。在你的情况下,&#34; 03:04 PM&#34;。

完整代码:fmt.Println(time.Parse("03:04 PM", m.Feed.Entry[i].GsxA100Time.T))

答案 3 :(得分:0)

以防万一任何人都可以使用这个时代,

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
}