1. ホーム
  2. go

[解決済み] unixのタイムスタンプをtime.Timeにパースする方法

2022-04-21 22:30:32

質問

Unixの タイムスタンプ が、out of range エラーになります。レイアウトは(Goのドキュメントにあるように)正しいので、それは私にとって本当に意味がありません。

package main

import "fmt"
import "time"

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

    fmt.Println(tm)
}

遊び場

解決方法は?

その 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

編集する

から変更になりました。 strconv.Atoi から strconv.ParseInt 32ビットシステムでのint型オーバーフローを回避するため。