如何在Go中解析非标准日期/时间字符串。例如,如果我想要将字符串10/15/1983转换为time.Time?time.Parse()函数假定允许您指定一种格式。
http://play.golang.org/p/v5DbowXt1x
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吗?
发布于 2015-05-02 16:25:46
如果您不记得指定布局("2006-01-02T15:04:05.000Z")中的数字,您可以使用我的简单日期格式库github.com/metakeule/fmtdate,它使用MS Excel约定,如Y、M、D、h,并在内部将它们转换为数字格式:
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)
}发布于 2020-01-13 18:10:25
如果您正在寻找C风格的格式化函数:在查看了一些选项之后,我选择了https://github.com/cactus/gostrftime,因为它通常遵循strfmt(3)表示法。
举个例子:
import (
"fmt"
"time"
"github.com/cactus/gostrftime"
)
func main() {
now := time.Now()
fmt.Println(gostrftime.Format("%Y-%m-%d", now))
}如果一种日期格式必须由C和Go使用,并且不能使用C实现,那么除了在Go端进行调整之外别无选择。上面的包满足了这一需求。
发布于 2021-03-27 11:06:14
如果你不想费心记住这些神奇的数字,你可以这样做:
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://stackoverflow.com/questions/14106541
复制相似问题