web-dev-qa-db-ja.com

UNIXタイムスタンプをtime.Timeに解析する方法

Unix timestamp を解析しようとしていますが、範囲外エラーが発生します。レイアウトが正しいため(Goのドキュメントのように)、これは実際には意味がありません。

package main

import "fmt"
import "time"

func main() {
    tm, err := time.Parse("1136239445", "1405544146")
    if err != nil{
        panic(err)
    }

    fmt.Println(tm)
}

プレイグラウンド

89
hey

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に変更されました。

157
ANisus

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

7
negi Yogi

日付用に作成したいくつかの関数を共有する:

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")
}
3
Adi

go documentation によると、Unixは現地時間を返します。

Unixは、指定されたUnix時間に対応するローカル時間を返します

これは、出力がコードを実行するマシンに依存することを意味します。ほとんどの場合、これは必要なものですが、場合によっては、UTCで値を取得することもできます。

そのために、UTCで時刻を返すように snippet を調整しました。

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
0
Thib-o

このレポを確認してください: https://github.com/araddon/dateparse

使用できます

t, err := dateparse.ParseAny(timestampString)
0
Rujoota Shah