如何将字符串日期格式转换为日期,我的格式为日期字符串
YYYY-MM-DD
Run Code Online (Sandbox Code Playgroud)
以下我试着没有运气.
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")
Run Code Online (Sandbox Code Playgroud)
以上所有陈述都给出了解析错误.
ain*_*ain 28
请阅读time.Parse的文档:
布局通过显示定义的参考时间来定义格式
1月2日星期一15:04:05 -0700 MST 2006
会被解释,如果它是价值; 它作为输入格式的一个例子.然后对输入字符串进行相同的解释.
所以正确的格式是
t, err := time.Parse("2006-01-02", "2011-01-19")
Run Code Online (Sandbox Code Playgroud)
除了使用文字2006-01-02时间格式之外,您还可以通过创建一个类似于 Go 在time包中的常量来减少错误。
RFC-3339中的格式YYYY-MM-DD定义如下(顺序调整):full-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
Run Code Online (Sandbox Code Playgroud)
因此,您可以创建一个如下所示的常量来与内置常量time.RFC3339和time.RFC3339Nano常量一起使用。
const RFC3339FullDate = "2006-01-02"
Run Code Online (Sandbox Code Playgroud)
然后你可以写以下内容:
t, err := time.Parse(RFC3339FullDate, "2011-01-19")
Run Code Online (Sandbox Code Playgroud)
这是在mogo/time/timeutil包中,所以你可以写:
t, err := time.Parse(timeutil.RFC3339FullDate, "2011-01-19")
Run Code Online (Sandbox Code Playgroud)
作为参考,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"
)
Run Code Online (Sandbox Code Playgroud)