3 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊
time.Now().String()僅用于調(diào)試(參見 參考資料go doc)。
您應(yīng)該改用time.Format().
例如:
p := fmt.Println
now := time.Now().Format(time.RFC3339)
p(now)
parsed, _ := time.Parse(time.RFC3339, now)
p(parsed.Format(time.RFC3339))
產(chǎn)生:
2009-11-10T23:00:00Z
2009-11-10T23:00:00Z
您的其他擔(dān)憂time.Now().String() gives a wrong date可能是由于您運(yùn)行代碼的位置。例如,如果您在“The Go Playgounrd”中運(yùn)行,那么時(shí)間將不準(zhǔn)確。您應(yīng)該在自己的計(jì)算機(jī)上運(yùn)行它,并假設(shè)您的計(jì)算機(jī)有正確的時(shí)間,那么您應(yīng)該打印正確的時(shí)間。

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
與其他一些語言不同,Go 并不將 String() 視為事實(shí)上的編組方法——相反,它只是為了調(diào)試目的而打印出值。如果您使用正確的格式字符串,您可以從該格式解析回時(shí)間;但是,正確的格式字符串必須是 的確切時(shí)間Mon Jan 2 15:04:05 MST 2006,而不是任何時(shí)間;但是 String() 打印出來的格式?jīng)]有被 Time 包中的常量捕獲,所以它可能不值得做。
但是,相反,MarshalText 和 UnmarshalText 方法可能會(huì)更好地捕獲您嘗試做的事情:
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

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊
操場(chǎng)上的時(shí)間是固定的,總是圍棋公告的日期和時(shí)間。
https://github.com/golang/go/issues/10663
因此,要正確使用時(shí)間,您需要在本地運(yùn)行它。
關(guān)于將時(shí)間解析為字符串或返回,您必須傳遞時(shí)間字符串的格式:例如:
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
- 3 回答
- 0 關(guān)注
- 131 瀏覽
添加回答
舉報(bào)