亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解析時間到字符串并返回

解析時間到字符串并返回

Go
SMILET 2022-05-18 15:49:20
我正在嘗試在 Go 中做一些在 Java 等語言中非常簡單的事情我想將當前時間解析為字符串,然后將其解析回時間。這是我嘗試過的代碼,但從這里可以看出它給出了意想不到的結果。我面臨兩個問題time.Now().String() 給出了錯誤的日期如果我將時間轉換為字符串并將其轉換回時間,它會給出一個完全不同的日期。什么是正確(且簡單)的方法?       p := fmt.PrintlnstartStr := time.Now().String()   //2009-11-10 23:00:00 +0000 UTC m=+0.000000001p(startStr)startTime, _ := time.Parse(    "2009-11-10 23:00:00 +0000 UTC m=+0.000000001",    startStr)p(startTime)             //0001-01-01 00:00:00 +0000 UTC
查看完整描述

3 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

time.Now().String()僅用于調試(參見 參考資料go doc)。


您應該改用time.Format().


例如:


    p := fmt.Println

    now := time.Now().Format(time.RFC3339)

    p(now)


    parsed, _ := time.Parse(time.RFC3339, now)

    p(parsed.Format(time.RFC3339))

產生:


2009-11-10T23:00:00Z

2009-11-10T23:00:00Z

您的其他擔憂time.Now().String() gives a wrong date可能是由于您運行代碼的位置。例如,如果您在“The Go Playgounrd”中運行,那么時間將不準確。您應該在自己的計算機上運行它,并假設您的計算機有正確的時間,那么您應該打印正確的時間。


查看完整回答
反對 回復 2022-05-18
?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

與其他一些語言不同,Go 并不將 String() 視為事實上的編組方法——相反,它只是為了調試目的而打印出值。如果您使用正確的格式字符串,您可以從該格式解析回時間;但是,正確的格式字符串必須是 的確切時間Mon Jan 2 15:04:05 MST 2006,而不是任何時間;但是 String() 打印出來的格式沒有被 Time 包中的常量捕獲,所以它可能不值得做。


但是,相反,MarshalText 和 UnmarshalText 方法可能會更好地捕獲您嘗試做的事情:


startStr, _ := time.Now().MarshalText()

fmt.Println(string(startStr)) // 2009-11-10T23:00:00Z


startTime := new(time.Time)

startTime.UnmarshalText(startStr)


fmt.Println(startTime) // 2009-11-10 23:00:00 +0000 UTC


查看完整回答
反對 回復 2022-05-18
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

操場上的時間是固定的,總是圍棋公告的日期和時間。


https://github.com/golang/go/issues/10663


因此,要正確使用時間,您需要在本地運行它。


關于將時間解析為字符串或返回,您必須傳遞時間字符串的格式:例如:


package main


import (

    "fmt"

    "time"

)


func main() {

    current := time.Now()

    fmt.Println("Init Time:", current.String())

    timeCustomFormatStr := current.Format("2006-01-02 15:04:05 -0700")

    fmt.Println("Custom format", timeCustomFormatStr)

    parsedTime, err := time.Parse("2006-01-02 15:04:05 -0700",timeCustomFormatStr)

    if err != nil {

        fmt.Println(err)

        return

    }

    fmt.Println("parsedTime From Custom:", parsedTime)


    timeFormatRFC3339 := current.Format(time.RFC3339)

    fmt.Println("RFC3339 format", timeFormatRFC3339)


    parsedTimeRFC3339, err := time.Parse(time.RFC3339,timeFormatRFC3339)

    if err != nil {

        fmt.Println(err)

        return

    }

    fmt.Println("parsedTime From Custom:", parsedTimeRFC3339)

}

參考:1 https://golang.org/pkg/time/#Time.Format


查看完整回答
反對 回復 2022-05-18
  • 3 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號