回答:
time.Parse
この関数は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
編集:
32ビットシステムでのintオーバーフローを回避するためにからstrconv.Atoi
に変更されましstrconv.ParseInt
た。
strconv.ParseUint
とにかく負の数は意味をなさないので、代わりに使用した方がいいのではないでしょうか?
func Unix(sec int64, nsec int64) Time
を受け取りint64
ます。また、秒の負の数は完全に理にかなっています-1970年より前の日付を表します!:)についてはnsec
、負の値は秒からその数ナノ秒を取り除くことを意味します。
unixタイムスタンプをUTCに変換するtime.Unix関数を直接使用できます。
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
Go Playgroundにチェックイン:https : //play.golang.org/p/5FtRdnkxAd
日付用に作成したいくつかの関数を共有します。
(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")
}
.In(loc)
と、に時間がかかりました-0400 EDT
。それをに置き換えると.In(time.UTC)
、UTCで時間を費やすことができました。
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
時間を使用するだけです。
例:
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の作業例。