首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析非标准格式的日期/时间字符串

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

Stack Overflow用户
提问于 2013-01-01 06:32:20
回答 3查看 50.1K关注 0票数 74

如何在Go中解析非标准日期/时间字符串。例如,如果我想要将字符串10/15/1983转换为time.Timetime.Parse()函数假定允许您指定一种格式。

http://play.golang.org/p/v5DbowXt1x

代码语言:javascript
复制
package main

import "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文档中找不到这样的函数,我唯一的选择是regex吗?

EN

回答 3

Stack Overflow用户

发布于 2015-05-02 16:25:46

如果您不记得指定布局("2006-01-02T15:04:05.000Z")中的数字,您可以使用我的简单日期格式库github.com/metakeule/fmtdate,它使用MS Excel约定,如Y、M、D、h,并在内部将它们转换为数字格式:

代码语言:javascript
复制
package main

import (
    "github.com/metakeule/fmtdate"

    "fmt"
)

func main() {
    test, err := fmtdate.Parse("MM/DD/YYYY", "10/15/1983")
    if err != nil {
        panic(err)
    }

    fmt.Println(test)
}
票数 7
EN

Stack Overflow用户

发布于 2020-01-13 18:10:25

如果您正在寻找C风格的格式化函数:在查看了一些选项之后,我选择了https://github.com/cactus/gostrftime,因为它通常遵循strfmt(3)表示法。

举个例子:

代码语言:javascript
复制
import (
    "fmt"
    "time"
    "github.com/cactus/gostrftime"
)

func main() {
    now := time.Now()
    fmt.Println(gostrftime.Format("%Y-%m-%d", now))
}

如果一种日期格式必须由C和Go使用,并且不能使用C实现,那么除了在Go端进行调整之外别无选择。上面的包满足了这一需求。

票数 2
EN

Stack Overflow用户

发布于 2021-03-27 11:06:14

如果你不想费心记住这些神奇的数字,你可以这样做:

代码语言:javascript
复制
package main

import (
   "fmt"
   "time"
)

func main() {
   var (
      y, d int
      m time.Month
   )
   fmt.Sscanf("10/15/1983", "%v/%v/%v", &m, &d, &y)
   t := time.Date(y, m, d, 0, 0, 0, 0, time.UTC)
   fmt.Println(t) // 1983-10-15 00:00:00 +0000 UTC
}

https://golang.org/pkg/fmt#Sscanf

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14106541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档