Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 解析Go中年份为负数的日期?_Date_Go - Fatal编程技术网

Date 解析Go中年份为负数的日期?

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

如何解析日期“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 {
        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之间。