簡體   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