我正在导入许多格式的字段:
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”
有什么建议吗?
答案 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
答案 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
}