Date 解析Go中年份为负数的日期?
如何解析日期“1500年3月3日”来表示公元前1500年Date 解析Go中年份为负数的日期?,date,go,Date,Go,如何解析日期“1500年3月3日”来表示公元前1500年 这是一份说明该概念的初稿: package main import ( "fmt" "strings" "time" ) func parseCEDate(value string) (time.Time, error) { const layout = "_2 Jan 2006" date, err := time.Parse(layout, value) if err == nil
这是一份说明该概念的初稿:
package main
import (
"fmt"
"strings"
"time"
)
func parseCEDate(value string) (time.Time, error) {
const layout = "_2 Jan 2006"
date, err := time.Parse(layout, value)
if err == nil {
return date, err
}
perr, ok := err.(*time.ParseError)
if !ok {
return time.Time{}, err
}
if perr.LayoutElem != "2006" {
return time.Time{}, err
}
if !strings.HasPrefix(perr.ValueElem, "-") {
return time.Time{}, err
}
value = strings.Replace(value, perr.ValueElem, perr.ValueElem[1:], 1)
date, derr := time.Parse(layout, value)
if derr != nil {
return time.Time{}, err
}
return date.AddDate(-2*date.Year(), 0, 0), derr
}
func main() {
fmt.Println(parseCEDate("3 Mar -1500"))
fmt.Println(parseCEDate("3 Mar 1500"))
}
游乐场:
输出:
-1500-03-03 00:00:00 +0000 UTC <nil>
1500-03-03 00:00:00 +0000 UTC <nil>
-1500-03-03 00:00:00+0000 UTC
1500-03-03 00:00:00+0000 UTC
根据:年份必须在0000到9999之间。