【问题标题】:Parsing a string into a timestamp is cutting off the year part of the string [duplicate]将字符串解析为时间戳正在切断字符串的年份部分[重复]
【发布时间】:2021-05-23 02:06:55
【问题描述】:

我有一个带有时间戳格式的字符串

"2021-02-04 23:45:00" 但是当我尝试用 time.parse 解析它时,它似乎切断了年份部分。

代码是

case "period_end":
                fmt.Println(record[i])
                ts, err := time.Parse("2021-02-04 23:45:00", record[i])
                if err != nil {
                    log.Printf("Time conversion failed: %v", err)
                    return
                }
reading.Interval = t

此时的record[i]是一个字符串

2021-02-04 00:15:00

而reading.Interval就是time.Time

Printf中返回的错误是

Time conversion failed: parsing time "2021-02-04 00:15:00" as "2021-02-04 23:45:00": cannot parse "-02-04 00:15:00" as "1"

在我所做的任何搜索中都找不到。我在这里错过了什么?

【问题讨论】:

    标签: go timestamp


    【解决方案1】:

    替换time.Parse中的第一个参数:

    来自

    "2021-02-04 23:45:00"
    

    到

    "2006-01-02 15:04:00"
    

    Golang 使用特定日期进行格式化,不知道为什么 https://golang.org/src/time/format.go

    【讨论】:

    • 好吧,我会...错过那个...谢谢..我会尽快接受答案。
    • 我自己肯定犯了这个错误!很高兴它现在可以工作了。
    【解决方案2】:

    Go 使用这个默认时间来设置布局:

    "2006-01-02T15:04:05.000Z"
    

    更多 info 用于此布局:

    布局中使用的参考时间为具体时间:

    2006 年 1 月 2 日星期一 15:04:05 MST

    这是 Unix 时间 1136239445。由于 MST 是 GMT-0700,所以参考时间可以认为是

    01/02 03:04:05PM '06 -0700

    所以要解决你的问题:

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        recordTime := "2021-02-04 23:45:00"
        ts, err := time.Parse("2006-01-02 15:04:05", recordTime)
            if err != nil {
                fmt.Println("error: ", err)
            return
        }
        fmt.Println(ts)
    }
    
    

    此代码可以在here找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多