2017-01-12 9 views
2

私は、異なる長さのタイムスタンプを保持する値のスライスを持っています。 それらのほとんどは、次のようになります。長さの異なる文字列のタイムスタンプを解析するにはどうすればよいですか?

2006-01-02T15:04:05.000000Z 

のが、それらのいくつかはある短い:

2006-01-02T15:04:05.00000Z 
2006-01-02T15:04:05.0000Z 

私が行う場合:

parsing time "2016-10-23T02:38:45.25986Z" as "2006-01-02T15:04:05.000000Z": cannot parse "" as ".000000" 
parsing time "2016-10-23T21:43:59.0175Z" as "2006-01-02T15:04:05.000000Z": cannot parse ".0175Z" as ".000000" 

str := dataSlice[j][0].(string) 
layout := "2006-01-02T15:04:05.000000Z" 
t, err := time.Parse(layout, str) 

私のようなエラーが発生します

私はそれらを解析したい元のとおりです。 長さに対応するレイアウトを動的に切り替えるにはどうすればよいですか? (そして、なぜエラーメッセージが異なるのですか?)

+0

小数部分はすべて「0」ですか、そうでない場合は小秒の解像度が必要ですか?解析する前に、すべてのタイムスタンプの文字列からその文字列を取り除くのは簡単でしょう。 – JimB

+0

残念ながら、それらはすべて '0'サンプルではありません。 '2016-07-04T09:30:33.031979Z''2016-10-23T22:01:01.41305Z'2016-10-23T14:50:55.0671Z' – myNickname

答えて

1

時間レイアウトの場合、小数点以下の桁数の秒数が任意の場合は、レイアウトに0の代わりに9を使用します。たとえば、2006-01-02T15:04:05.00000Zは、小数点以下5桁の時刻にのみ一致します。ただし、2006-01-02T15:04:05.9Zは、時刻をと一致させます.の10進数の後の桁数(ゼロを含む)。

https://play.golang.org/p/QMD28aqv9E

Time.Formatドキュメントでは、この動作を説明し、最後の一つは例を提供します。

関連する問題