Go语言中如何将未知格式的日期字符串转换为日期对象?
解决Go中日期字符串解析与格式转换问题
首先,你给出的日期字符串Tue, 03 Mar 2019 11:23:14 UTC完全符合Go标准库中的time.RFC1123格式,直接用这个常量作为布局参数就能解析,不需要自己编写格式字符串:
package main import ( "fmt" "time" ) func main() { dateStr := "Tue, 03 Mar 2019 11:23:14 UTC" // 用RFC1123布局解析日期字符串 t, err := time.Parse(time.RFC1123, dateStr) if err != nil { fmt.Println("解析失败:", err) return } // 转换为RFC822格式输出 fmt.Println(t.Format(time.RFC822)) }
运行这段代码会输出符合time.RFC822格式的日期,例如03 Mar 19 11:23 UTC。
关于未知格式日期字符串的解析
Go标准库没有内置自动识别任意日期格式的功能——因为日期格式的变种太多,无法做到百分百覆盖。如果必须处理格式不确定的日期字符串,只能手动枚举常见的日期格式,逐个尝试解析,直到找到匹配的:
package main import ( "fmt" "time" ) func parseUnknownDate(dateStr string) (time.Time, error) { // 枚举常见的日期格式 commonFormats := []string{ time.RFC1123, time.RFC822, time.UnixDate, time.RFC3339, "2006-01-02 15:04:05", "02/01/2006 15:04", // 可根据需求添加更多格式 } for _, format := range commonFormats { t, err := time.Parse(format, dateStr) if err == nil { return t, nil } } return time.Time{}, fmt.Errorf("无法识别该日期字符串的格式: %s", dateStr) } func main() { testStr := "Tue, 03 Mar 2019 11:23:14 UTC" t, err := parseUnknownDate(testStr) if err != nil { fmt.Println(err) return } fmt.Println(t.Format(time.RFC822)) }
这种方法的局限性很明显:如果遇到非常见的自定义格式,还是需要你手动确认格式并添加到枚举列表中,否则无法解析。
内容的提问来源于stack exchange,提问作者user971741
相关产品推荐
相关产品推荐

