gpt4 book ai didi

datetime - Go中灵活的日期/时间解析(在解析中添加默认值)

转载 作者:IT王子 更新时间:2023-10-29 01:25:36 24 4
gpt4 key购买 nike

进一步this question ,我想解析在命令行上传递给 Go 程序的日期/时间。目前,我使用 flag 包来填充字符串变量 ts,然后是以下代码:

if ts == "" {
config.Until = time.Now()
} else {
const layout = "2006-01-02T15:04:05"
if config.Until, err = time.Parse(layout, ts); err != nil {
log.Errorf("Could not parse %s as a time string: %s. Using current date/time instead.", ts, err.Error())
config.Until = time.Now()
}
}

如果用户传递的格式完全正确 - 例如2019-05-20T09:07:33 或类似的。

但是,如果可能的话,我希望能够灵活地通过例如2019-05-20T09:072019-05-20T09 甚至 2019-05-20 并有小时、分钟和秒在适当的地方默认为 0。

有没有一种明智的1方法可以做到这一点?


1 基本上不需要我编写自己的解析器


更新

我已经找到了一个解决方案,虽然它不是特别优雅,但它似乎适用于我可能遇到的大多数情况。

package main

import (
"fmt"
"time"
)

func main() {

const layout = "2006-01-02T15:04:05"
var l string
var input string

for _, input = range []string{"2019-05-30", "2019-05-30T16", "2019-05-30T16:04", "2019-05-30T16:04:34",
"This won't work", "This is extravagantly long and won't work either"} {
if len(input) < len(layout) {
l = layout[:len(input)]
} else {
l = layout
}
if d, err := time.Parse(l, input); err != nil {
fmt.Printf("Error %s\n", err.Error())
} else {
fmt.Printf("Layout %-20s gives time %v\n", l, d)
}
}
}

最佳答案

只需尝试每种格式,直到找到一种有效为止。如果无效,则返回错误。

var formats = []string{"2006-01-02T15:04:05", "2006-01-02", ...}

func parseTime(input string) (time.Time, error) {
for _, format := range formats {
t, err := time.Parse(format, input)
if err == nil {
return t, nil
}
}
return time.Time{}, errors.New("Unrecognized time format")
}

关于datetime - Go中灵活的日期/时间解析(在解析中添加默认值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56374333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com