为了账号安全,请及时绑定邮箱和手机立即绑定

解析非“标准”格式的日期/时间字符串

解析非“标准”格式的日期/时间字符串

Go
倚天杖 2021-05-13 18:46:49
如何在Go中解析非标准的日期/时间字符串。例如,如果我想将字符串10/15/1983转换为time.Time?该time.Parse()功能应该允许您指定格式。http://play.golang.org/p/v5DbowXt1xpackage mainimport "fmt"import "time"func main() {    test, err := time.Parse("10/15/1983", "10/15/1983")    if err != nil {        panic(err)    }    fmt.Println(test)}这导致了恐慌。panic: parsing time "10/15/1983" as "10/15/1983": cannot parse "" as "0/"从逻辑上讲这是有道理的,因为它应该如何知道哪一天和哪一个月。其他语言具有类似于以下功能:parse("mm/dd/yyyy", "10/15/1983")我在Go docs中找不到这样的功能,我是regex的唯一选择吗?
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

time.Parse正在寻找一些关键值。


通过更改:


test, err := time.Parse("10/15/1983", "10/15/1983")


test, err := time.Parse("01/02/2006", "10/15/1983")

解析器将识别出它。


这是操场上修改后的代码。


package main


import "fmt"

import "time"


func main() {

    test, err := time.Parse("01/02/2006", "10/15/1983")

    if err != nil {

        panic(err)

    }


    fmt.Println(test)

}



您可以利用src / pkg / time / format.go文件中的常量列表来创建自己的解析格式。


const (

    stdLongMonth      = "January"

    stdMonth          = "Jan"

    stdNumMonth       = "1"

    stdZeroMonth      = "01"

    stdLongWeekDay    = "Monday"

    stdWeekDay        = "Mon"

    stdDay            = "2"

    stdUnderDay       = "_2"

    stdZeroDay        = "02"

    stdHour           = "15"

    stdHour12         = "3"

    stdZeroHour12     = "03"

    stdMinute         = "4"

    stdZeroMinute     = "04"

    stdSecond         = "5"

    stdZeroSecond     = "05"

    stdLongYear       = "2006"

    stdYear           = "06"

    stdPM             = "PM"

    stdpm             = "pm"

    stdTZ             = "MST"

    stdISO8601TZ      = "Z0700"  // prints Z for UTC

    stdISO8601ColonTZ = "Z07:00" // prints Z for UTC

    stdNumTZ          = "-0700"  // always numeric

    stdNumShortTZ     = "-07"    // always numeric

    stdNumColonTZ     = "-07:00" // always numeric

)

因此,只要您的格式指定年份,就应该使用“ 06”或“ 2006”来完成,以“ 05”或“ 5”来指定秒,并在“ MST”,“ Z0700”,“ Z07:00”中指定时区”,“-0700”,“-07”或“ -07:00”。如果您引用常量列表,则可以将需要解析的任何标准格式组合在一起。


例如,如果要以“通用日志格式”(Apache的日志文件)格式解析日期/时间,则可以通过将以下字符串传递time.Parse()为layout参数来实现。


"02/Jan/2006:15:04:05 -0700"

“ 02”表示月份的日期字段,“ Jan”表示月份的名称字段,“ 2006”表示年份的字段,“ 15”表示24小时格式的一天中的小时字段,“ 04”表示分钟的字段, “ 05”表示秒字段,“-0700”表示时区字段。


该格式将解析当前的PST时间: 31/Dec/2012:15:32:25 -0800


因此,time.Parse()调用将如下所示:


test, err := time.Parse("02/Jan/2006:15:04:05 -0700", "31/Dec/2012:15:32:25 -0800")


查看完整回答
反对 回复 2021-05-24
  • 3 回答
  • 0 关注
  • 257 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信