go time.Parser错误,日期为DMYYYY [关闭]

Parsing a date on go, with that format DMYYYY, it throw me an error:

month out of range

The date is:

892009

The code is:

if t, err := time.Parse("122006","892009"); err != nil { fmt.Println(err.Error()) } else { fmt.Println(t) }

Some seven digit dates will be ambiguous (DMMYYYY or DDMYYYY?). For example,

package main

import (
    "fmt"
    "time"
)

func parseDate(date string) (time.Time, error) {
    const pfmt = "02012006" // DDMMYYYY
    if len(date) == 6 {
        d := ("0" + date[0:1]) + ("0" + date[1:2]) + date[2:] // DMYYYY
        t, err := time.Parse(pfmt, d)
        if err == nil {
            return t, nil
        }
    }
    if len(date) == 7 {
        d1 := ("0" + date[0:1]) + date[1:3] + date[3:] // DMMYYYY
        t1, err1 := time.Parse(pfmt, d1)
        d2 := date[0:2] + ("0" + date[2:3]) + date[3:] // DDMYYYY
        t2, err2 := time.Parse(pfmt, d2)
        if err1 == nil && err2 == nil {
            err := &time.ParseError{
                Value:   date,
                Message: ": ambiguous date",
            }
            return time.Time{}, err
        }
        if err1 == nil {
            return t1, nil
        }
        if err2 == nil {
            return t2, nil
        }
    }
    return time.Parse(pfmt, date) // DDMMYYYY
}

func main() {
    dates := []string{
        "892009",   // DMYYYY
        "1102009",  // DMMYYYY
        "1312009",  // DDMYYYY
        "1122009",  // ???YYYY : DMMYYYY or DDMYYYY
        "31122009", // DDMMYYYY
    }
    for _, date := range dates {
        pDate, err := parseDate(date)
        fmt.Printf("%10q %v : %v
", date, pDate.Format("02-01-2006"), err)
    }
}

Playground: https://play.golang.org/p/pSknyg10yJ

Output:

  "892009" 08-09-2009 : <nil>
 "1102009" 01-10-2009 : <nil>
 "1312009" 13-01-2009 : <nil>
 "1122009" 01-01-0001 : parsing time "1122009": ambiguous date
"31122009" 31-12-2009 : <nil>