5

次のコード スニペットを実行すると、主にGo の time パッケージのドキュメントとその Parse 関数の例から派生したものになります。

package main

import (
   "time"
   "fmt"
)

var shortForm = "2006-Jan-02"
t, _ := time.Parse(shortForm, "2013-Feb-03")
fmt.Println(t)

2013-02-03 00:00:00 +0000 UTC次に、コンソールで正しい結果 を取得できます。

ただし、、、またはshortFormのように値をわずかに変更すると、誤った結果が出力され、 、、またはのように規則正しく出力されません。2007-Jan-022006-Feb-022006-Jan-010001-01-01 00:00:00 +0000 UTC2013-03-01 00:00:00 +0000 UTC2013-01-03 00:00:00 +0000 UTC

では、なぜこの関数はこのように奇妙な動作をするのでしょうか? どうすれば対処できますか?関数を使用するたびに、レイアウト変数を常に定義する必要があります2006-Jan-02か?

ありがとう。

4

1 に答える 1

7

time.Parseおよびtime.Format関数は、レイアウト引数の数字を使用して、どの日付コンポーネントが参照されているかを識別します。

  • 1Jan: 月 (または/のように言葉で表示することもできますJanuary)
  • 2: 日
  • 3: 時 (または1524 時間制)
  • 4: 分
  • 5: 2番目
  • 6: 年 (または20064 桁の年)
  • 7: タイム ゾーン (またはMSTタイム ゾーン コード)。

したがって、レイアウト文字列を から に変更する2006-Jan-022006-Jan-01、時間文字列で月が 2 回表され、予期しない結果が生じることになります。

于 2013-09-21T00:55:04.797 に答える