解析时间到字符串并返回

我正在尝试在 Go 中做一些在 Java 等语言中非常简单的事情

我想将当前时间解析为字符串,然后将其解析回时间。

这是我尝试过的代码,但从这里可以看出它给出了意想不到的结果。

我面临两个问题

  1. time.Now().String() 给出了错误的日期

  2. 如果我将时间转换为字符串并将其转换回时间,它会给出一个完全不同的日期。

什么是正确(且简单)的方法?

       p := fmt.Println

startStr := time.Now().String()   //2009-11-10 23:00:00 +0000 UTC m=+0.000000001

p(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


SMILET
浏览 150回答 3
3回答

开满天机

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:00Z2009-11-10T23:00:00Z您的其他担忧time.Now().String() gives a wrong date可能是由于您运行代码的位置。例如,如果您在“The Go Playgounrd”中运行,那么时间将不准确。您应该在自己的计算机上运行它,并假设您的计算机有正确的时间,那么您应该打印正确的时间。

小怪兽爱吃肉

与其他一些语言不同,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:00ZstartTime := new(time.Time)startTime.UnmarshalText(startStr)fmt.Println(startTime) // 2009-11-10 23:00:00 +0000 UTC

慕容708150

操场上的时间是固定的,总是围棋公告的日期和时间。https://github.com/golang/go/issues/10663因此,要正确使用时间,您需要在本地运行它。关于将时间解析为字符串或返回,您必须传递时间字符串的格式:例如:package mainimport (    "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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go