2017-06-27 5 views
0

Unix()関数を使用する擬似乱数datetimeジェネレータで生成されたdatetime文字列を解析する必要があります。生成された日時は、ここで、このコードのバージョンは私のコンピュータや遊び場の両方で動作し、問題だ遊び場での作業中にGolangの時間解析が正しく機能しない

package main 

import (
    "fmt" 
    "time" 
) 

func main() { 
    a := time.Date(2016, 1, 0, 0, 0, 0, 0, time.UTC).Unix() 
    kk := time.Unix(a, 0) 
    t, err := time.Parse("2006-01-02 15:04:05.999999999 -0700 MST", kk.String()) 
    if err != nil { 
     panic(err) 
    } 
    fmt.Println(t) 
} 

しかし、遊び場、私のパニックの作品以下のバージョン2010年と2017年 の間、様々な日付と時刻のペアを取りますコンピュータ、

package main 

import (
    "fmt" 
    "time" 
) 

func main() { 
    a := time.Date(2018, 1, 0, 0, 0, 0, 0, time.UTC).Unix() 
    kk := time.Unix(a, 0) 
    t, err := time.Parse("2006-01-02 15:04:05.999999999 -0700 MST", kk.String()) 
    if err != nil { 
     panic(err) 
    } 
    fmt.Println(t) 
} 

ここでエラーがだ、

panic: parsing time "2017-12-31 03:00:00 +0300 +03" as "2006-01-02 15:04:05.999999999 -0700 MST": cannot parse "+03" as "MST" 

私が使用して行くのバージョンはgo1.8.3 darwin/amd64です。

アイデア?

+0

私の最初の考えは、使用しているgolangのバージョンです。 Gogland-EAPで2番目のバージョンをMacで1.8.3を使用して実行しましたが、問題はありませんでした。出力は次のとおりです:2017-12-30 19:00:00 -0500 EST 終了コード0で終了したプロセス – ahillman3

+0

私が使用しているバージョンはgo1.8.3 darwin/amd64です。 IDEや何もない、私はちょうどそれをターミナル経由で実行します。このバージョンの前に、私は1.7.2を使用して1時間前に更新して、更新が私の問題を解決するかどうかを確認しました。 – malisit

+0

私と同じです。私はちょうどそれをコマンドラインでした。問題ない。出力:go run main.go 2017-12-30 19:00:00 -0500 EST – ahillman3

答えて

0

ここでの問題は、Europe/Istanbulの略語変更に関連しています。

トルコはEET/EEST(+ 02/+ 03)からパーマネント+03に、 有効2016-09-07に切り替わりました。 (Burak AYDINに感謝します。)新しい時間の発明された省略形よりもむしろ "+03"を で使用してください。

時間パッケージには、現在、EET/EESTとして03を受け入れていないと2006-01-02 15:04:05.999999999 -0700 MSTの形で解析するタイムゾーンとして+03が含まれている日時文字列を使用している場合、この問題が発生します。

関連する問題