web-dev-qa-db-ja.com

日付の文字列

文字列の日付形式を日付に変換する方法、私はの形式の日付文字列を持っています

YYYY-MM-DD 

続いて私は運なしで試しました。

t, err := time.Parse("%Y-%m-%d", "2011-01-19")
t, err := time.Parse("YYYY-MM-DD", "2011-01-19")
t, err := time.Parse("2016-01-20", "2011-01-19")

上記のすべてのステートメントは解析エラーを与えています。

11
Pankaj Khairnar

time.Parse のドキュメントをお読みください:

レイアウトは、参照時間をどのように定義するかを示すことにより、形式を定義します

月1月2日15:04:05 -0700 MST 2006

値であれば解釈されます。入力形式の例として機能します。同じ解釈が入力文字列に対して行われます。

正しいフォーマットは

t, err := time.Parse("2006-01-02", "2011-01-19")
27
ain

リテラル2006-01-02時間形式を使用することに加えて、Goがtimeパッケージで行う方法と同様の定数を作成することにより、エラーを削減します。

YYYY-MM-DD形式は、次のように RFC-3339full-dateとして定義されます(順序調整):

full-date       = date-fullyear "-" date-month "-" date-mday
date-fullyear   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                          ; month/year

そのため、次のような定数を作成して、組み込みのtime.RFC3339およびtime.RFC3339Nano定数と共に使用できます。

const RFC3339FullDate = "2006-01-02"

次に、以下を記述できます。

t, err := time.Parse(RFC3339FullDate, "2011-01-19")

これは gotilla/time/timeutil パッケージにあるため、次のように記述できます。

t, err := time.Parse(timeutil.RFC3339FullDate, "2011-01-19")

参考のため、 time/format.go には次の定数が含まれています。

const (
    ANSIC       = "Mon Jan _2 15:04:05 2006"
    UnixDate    = "Mon Jan _2 15:04:05 MST 2006"
    RubyDate    = "Mon Jan 02 15:04:05 -0700 2006"
    RFC822      = "02 Jan 06 15:04 MST"
    RFC822Z     = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
    RFC850      = "Monday, 02-Jan-06 15:04:05 MST"
    RFC1123     = "Mon, 02 Jan 2006 15:04:05 MST"
    RFC1123Z    = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
    RFC3339     = "2006-01-02T15:04:05Z07:00"
    RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
    Kitchen     = "3:04PM"
    // Handy time stamps.
    Stamp      = "Jan _2 15:04:05"
    StampMilli = "Jan _2 15:04:05.000"
    StampMicro = "Jan _2 15:04:05.000000"
    StampNano  = "Jan _2 15:04:05.000000000"
)
3
Grokify