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 关注
- 149 浏览
添加回答
举报