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 &引用;“月超出范围”;分析不带分隔符的日期时_Date_Go_Time - Fatal编程技术网

Date &引用;“月超出范围”;分析不带分隔符的日期时

Date &引用;“月超出范围”;分析不带分隔符的日期时,date,go,time,Date,Go,Time,如何让golang正确解析日期字符串(如31916 我不断收到超出范围的个月的错误 date, err := time.Parse("1206", "31916") fmt.Println(date, err) 当然,我希望将月份视为3,而不是31,但我不确定如何强制它在向格式添加分隔符之外的月份停止在3 package main import ( "fmt" "time" ) func parseDate(date string) (time.Time, error) {

如何让golang正确解析日期字符串(如
31916
我不断收到超出范围的个月的错误

date, err := time.Parse("1206", "31916")
fmt.Println(date, err)
当然,我希望将月份视为3,而不是31,但我不确定如何强制它在向格式添加分隔符之外的月份停止在3

package main

import (
    "fmt"
    "time"
)

func parseDate(date string) (time.Time, error) {
    if len(date) == 5 {
        date = "0" + date
    }
    return time.Parse("010206", date)

}

func main() {
    date, err := parseDate("31916")
    fmt.Println(date, err)
    date, err = parseDate("031916")
    fmt.Println(date, err)
    date, err = parseDate("121916")
    fmt.Println(date, err)
}
输出:

2016-03-19 00:00:00 +0000 UTC <nil>
2016-03-19 00:00:00 +0000 UTC <nil>
2016-12-19 00:00:00 +0000 UTC <nil>
2016-03-19 00:00:00+0000 UTC
2016-03-19 00:00:00+0000 UTC
2016-12-19 00:00:00+0000 UTC

你不能。您传递的布局是不确定的-无法知道字符串中的月结束和日开始时间-此外,当一个选项失败而另一个选项没有失败时(想想
“11106”
-就是
1\11\06
11\1\06
?)。您最好编写一个包装器,使选择具有确定性:

import (
  "time"
  "strconv"
)

func parseWeirdLayout(dateString string) (time.Time, error) {
  parsedString := ""
  if len(dateString) == 5 {
    month, err := strconv.Atoi(dateString[0:2])
    if err != nil {
      return time.Now(), err
    }
    if month < 1 || month > 12 {
      parsedString = "0" + dateString 
    } else {
      parsedString = dateString[:2] + "0" + dateString[2:]
    }
  } else if len(dateString) == 4 {
    parsedString = "0" + dateString[:1] + "0" + dateString[1:]
  }

  return time.Parse("010206", parsedString)
}
导入(
“时间”
“strconv”
)
func parseWeirdLayout(日期字符串)(time.time,错误){
解析字符串:=“”
如果len(dateString)==5{
月份,错误:=strconv.Atoi(日期字符串[0:2])
如果错误!=零{
返回时间.Now(),错误
}
如果月份<1 | |月份>12{
parsedString=“0”+日期字符串
}否则{
parsedString=dateString[:2]+“0”+日期字符串[2:]
}
}如果len(dateString)==4,则为else{
parsedString=“0”+日期字符串[:1]+“0”+日期字符串[1:]
}
返回time.Parse(“010206”,parsedString)
}
在此处测试:


或者简单地使用不同的确定性布局,例如
“010206”

对不起,我不了解您的格式。。什么日期是31916?您是否像2016年3月19日那样尝试?这是一个疯狂的想法:您可能已将格式更改为
1 2 06
,并使用空格生成
31916
的所有排列。只有16种组合。然后逐一检查。