Is there a way to parse the following date string using time.Parse:
2023-06-06T07:04:58:278-07?

我try 使用格式2006-01-02T15:04:05:000Z07,但最后的:导致错误.

https://go.dev/play/p/y4T7meCX6D5

推荐答案

编写一个time.Parse包装函数以接受小数点、小数点逗号或冒号作为秒小数分隔符.

package main

import (
    "fmt"
    "strings"
    "time"
)

// Accept a decimal point, decimal comma, or colon
// as the seconds decimal separator.
func timeParse(layout, value string) (time.Time, error) {
    t, err := time.Parse(layout, value)
    if err == nil {
        return t, err
    }
    if strings.Count(value, ":") != 3 {
        return t, err
    }
    i := strings.LastIndexByte(value, ':')
    if i < 0 {
        return t, err
    }
    value2 := value[:i] + "." + value[i+1:]
    t2, err2 := time.Parse(layout, value2)
    if err2 == nil {
        return t2, err2
    }
    return t, err
}

func main() {
    inDate := "2023-06-06T07:04:58:278-07"
    parseFormat := "2006-01-02T15:04:05Z07"
    t, e := timeParse(parseFormat, inDate)
    if e != nil {
        fmt.Println(e)
    }
    fmt.Println(t)
}

https://go.dev/play/p/bjk8sw5yL78

2023-06-06 07:04:58.278 -0700 -0700

Go相关问答推荐

SEARCH On Conflict Clause不考虑乐观锁定版本

运行add. inf,这样我们就可以在app.conf中使用. inf参数了?

如何使用Promela建模语言对Golang RWLock进行建模

在nixos上找不到XInput2.h头文件的包

Kafka架构注册表-Broker:Broker无法验证记录

我可以在Golang中的另一个类型参数的基础上约束一个类型的参数吗?

为什么 mux.Vars() 返回空的 map[]

替换字符串中的最后一个字符

GitHub 中 REST API 的 aws 凭证问题

将 struct 转换为 CSV 字符串

具有两个参数的动态规划:天数和优惠券

泛型:实现嵌套接口

动态 SQL 集 Golang

在 Go 中发送 ack 和 term 后消息仍在 nats 限制队列中

如何使用 math/big 对 bigInt 进行取模?

如何在 GORM 中获取字段值

如何正确判断 io.Reader 是否为零?

如何在 Unmarshal 中使用泛型(转到 1.18)

带有 *s3.S3 对象的 Golang 单元测试

Golang 将类型 [N]byte 转换为 []byte