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