2016-08-05 28 views
2

私はこの日時、またはそれのように見えるものを持っています。UTC文字列をgolang時間オブジェクトに変換します。

2014-11-17 23:02:03 +0000 UTC 

私は時間オブジェクトにこれを変換したいと私は別にtime.Parseから任意の出力を生成することができませんでしてきた:

0001-01-01 00:00:00 +0000 UTC 

私はこれらのレイアウトを試してみた:

time.RFC3339 
0001-01-01 00:00:00 0000 UTC 
2016-10-10 
time.UnixDate 

もう少し - 何も働いていません。

これは私がparseを呼んでいる方法です:

updatedAt, err := time.Parse(time.UnixDate, updatedAtVar) 

どのように私は、文字列から時刻オブジェクトを作成するのですか?

答えて

4

おそらく間違ったレイアウトを使用していて、返されたエラーをチェックしていない可能性があります。

レイアウトはこの日付/時刻でなければならない、形式で入力時間は次のとおりです。

layout := "2006-01-02 15:04:05 -0700 MST" 
t, err := time.Parse(layout, "2014-11-17 23:02:03 +0000 UTC") 
fmt.Println(t, err) 

出力(Go Playground上でそれを試してみてください):

Mon Jan 2 15:04:05 -0700 MST 2006 

は、この作業コードを参照してください

2014-11-17 23:02:03 +0000 UTC <nil> 

編集:

あなたの質問には、入力時に(ゾーンオフセットの一部として)+記号が含まれていましたが、他の形式の時刻に間違いがあります。

"2006-01-02 15:04:05.999999999 -0700 MST" 

だから、どちらかあなたが同じレイアウトを使用できるように、時間を解析するためにこれを使用するか、レイアウトを指定することができ、あなたの文字列表現を生成するためにTime.Format()を使用します。

Time.String()は、次の形式の文字列を使用しています時間列を解析します。

第二ラウンド:あなたはURL内のあなたの時間の文字列を含むいる

+記号は、URLエンコーディングの特殊文字です。スペースを示します。したがって、+はスペースに変換されます(したがって、それはあなたの時間文字列から消えます)。適切なURLエンコーディングを使用してください! net/urlパッケージ、this exampleパッケージを確認してください。

+0

lol..yes。間違ったレイアウトを使用しました。私はどのレイアウトを使うのか分かりません。私はちょうど '' 2006-01-02 15:04:05 -0700 MST "'を試しましたが、どちらもうまくいきませんでした。 これは一般的な形式なので、使用するレイアウトが分かっているのだろうかと思っていました。 文字通り 'time.Now()'をStringに変換し、それを渡して(統合テストを書く) – praks5432

+0

@praks5432どういう意味ですか?それはあなたのために働いていないのですか?私の答えにあるプレイグラウンドのリンクをクリックし、自分で試してみてください。 – icza

+0

'time.Now()の出力である' 2014-11-17 23:02:03 0000 UTC'にペーストしました。(時間を凍らせてテストしました) このエラーはあなたの遊び場 '0001-01-01 00:00:00 +0000 UTCの解析時間" 2014-11-17 23:02:03 0000 UTC ""として "2006-01-02 15:04:05 -0700 MST":できません"UTC"を "-0700"と解釈してください。 – praks5432

0

誤ったレイアウトを使用している可能性があります。 time.Parseで説明されているように、Goが入力として渡された日付がどのようにフォーマットされたかを理解するのに役立つレイアウトを指定する必要があります。

レイアウトは事前定義されています(使用していたものと同じですが、入力には一致しません)。したがって、カスタムレイアウトを定義する必要があります。

t, err := time.Parse("2006-01-02 15:04:05 -0700 MST", "2014-11-17 23:02:03 +0000 UTC") 

も覚えておいてください:

Mon Jan 2 15:04:05 MST 2006 

レイアウトはあなたの入力の表現に一致する日付の表現は、という他には何もありません:

レイアウトを基準として、次の日付を使用していますerrに誤りがないか確認してください。あなたの試行はエラーを返したかもしれませんが、あなたはそれをチェックしませんでした。

package main 

import (
    "fmt" 
    "log" 
    "time" 
) 

func main() { 
    t, err := time.Parse("2006-01-02 15:04:05 -0700 UTC", "2014-11-17 23:02:03 +0000 UTC") 
    if err != nil { 
     log.Fatalln(err) 
    } 
    fmt.Println(t) 
} 
+0

はい、わかりました。しかし、私がやっていることは 'time.Now()。String'をURLパラメータとして使うことです。私はその後、そのパラメータを解凍し、時間に戻って変換しようとしています(これは私が書いているテストです)。 'time.Now()。String 'から出力された出力は、' 2014-11-17 23:02:03 0000 UTC'であり、解析されません。 私はレイアウトが間違っていることを知っています。私はどのレイアウトを見つけようとしています。 – praks5432

関連する問題