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”中運行,那么時間將不準確。您應該在自己的計算機上運行它,并假設您的計算機有正確的時間,那么您應該打印正確的時間。

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

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
- 3 回答
- 0 關注
- 135 瀏覽
添加回答
舉報