go - 如何将unix时间戳解析为time.Tim
我正在尝试解析Unix时间戳,但是我超出了范围错误。 这对我来说没有意义,因为布局是正确的(如Go文档中所示):
package main
import "fmt"
import "time"
func main() {
tm, err := time.Parse("1136239445", "1405544146")
if err != nil{
panic(err)
}
fmt.Println(tm)
}
操场
6个解决方案
131 votes
strconv.Atoi函数不执行Unix时间戳。 相反,您可以使用strconv.ParseInt将字符串解析为int64并创建时间戳为time.Unix:
package main
import (
"fmt"
"time"
"strconv"
)
func main() {
i, err := strconv.ParseInt("1405544146", 10, 64)
if err != nil {
panic(err)
}
tm := time.Unix(i, 0)
fmt.Println(tm)
}
输出:
2014-07-16 20:55:46 +0000 UTC
游乐场:[http://play.golang.org/p/v_j6UIro7a]
编辑:
已从strconv.Atoi更改为strconv.ParseInt以避免32位系统上的int溢出。
ANisus answered 2019-05-20T16:56:07Z
2 votes
你可以直接使用time.Unix函数将unix时间戳转换成UTC
package main
import (
"fmt"
"time"
)
func main() {
unixTimeUTC:=time.Unix(1405544146, 0) //gives unix time stamp in utc
unitTimeInRFC3339 :=unixTimeUTC.Format(time.RFC3339) // converts utc time to RFC3339 format
fmt.Println("unix time stamp in UTC :--->",unixTimeUTC)
fmt.Println("unix time stamp in unitTimeInRFC3339 format :->",unitTimeInRFC3339)
}
产量
unix time stamp in UTC :---> 2014-07-16 20:55:46 +0000 UTC
unix time stamp in unitTimeInRFC3339 format :----> 2014-07-16T20:55:46Z
入住游乐场:[https://play.golang.org/p/5FtRdnkxAd]
negi Yogi answered 2019-05-20T16:56:48Z
2 votes
共享我为日期创建的一些函数:
请注意,我想获得特定位置的时间(而不仅仅是UTC时间)。 如果你想要UTC时间,只需删除loc变量和.In(loc)函数调用。
func GetTimeStamp() string {
loc, _ := time.LoadLocation("America/Los_Angeles")
t := time.Now().In(loc)
return t.Format("20060102150405")
}
func GetTodaysDate() string {
loc, _ := time.LoadLocation("America/Los_Angeles")
current_time := time.Now().In(loc)
return current_time.Format("2006-01-02")
}
func GetTodaysDateTime() string {
loc, _ := time.LoadLocation("America/Los_Angeles")
current_time := time.Now().In(loc)
return current_time.Format("2006-01-02 15:04:05")
}
func GetTodaysDateTimeFormatted() string {
loc, _ := time.LoadLocation("America/Los_Angeles")
current_time := time.Now().In(loc)
return current_time.Format("Jan 2, 2006 at 3:04 PM")
}
func GetTimeStampFromDate(dtformat string) string {
form := "Jan 2, 2006 at 3:04 PM"
t2, _ := time.Parse(form, dtformat)
return t2.Format("20060102150405")
}
Adi answered 2019-05-20T16:57:24Z
0 votes
检查这个回购:[https://github.com/araddon/dateparse]
您可以使用
t, err := dateparse.ParseAny(timestampString)
Rujoota Shah answered 2019-05-20T16:57:52Z
0 votes
根据go文档,Unix返回本地时间。
Unix返回与给定Unix时间对应的本地时间
这意味着输出将取决于您的代码运行的机器,这通常是您所需要的,但有时,您可能希望获得UTC的值。
为此,我调整了片段,使其返回UTC时间:
i, err := strconv.ParseInt("1405544146", 10, 64)
if err != nil {
panic(err)
}
tm := time.Unix(i, 0)
fmt.Println(tm.UTC())
这打印在我的机器上(在CEST中)
2014-07-16 20:55:46 +0000 UTC
Thib-o answered 2019-05-20T16:58:50Z
-2 votes
只需使用time.Parse
例:
package main
import (
"fmt"
"time"
)
func main() {
fromString := "Wed, 6 Sep 2017 10:43:01 +0300"
t, e := time.Parse("Mon, _2 Jan 2006 15:04:05 -0700", fromString)
if e != nil {
fmt.Printf("err: %s\n", e)
}
fmt.Printf("UTC time: %v\n", t.UTC())
}
play.golang.org上的工作示例。
okhrypko answered 2019-05-20T16:59:25Z