【问题标题】:convering 00:33 to duration in golang将 00:33 转换为 golang 中的持续时间
【发布时间】:2023-02-03 12:55:05
【问题描述】:

我有一个格式为“MM:SS”的字符串“12:34”,我想将其转换为时间。持续时间。已经在这上面浪费了太多时间。我在这段代码中做错了什么:

package main

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

func parseDuration(input string) (time.Duration, error) {
    var layout string
    if strings.Count(input, ":") == 1 {
        layout = "04:05"
    } else {
        layout = "15:04:05"
    }
    t, err := time.Parse(layout, input)
    if err != nil {
        return 0, err
    }
    return t.Sub(time.Time{}), nil
}

func main() {
    input := "00:04"
    duration, err := parseDuration(input)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(int(duration.Seconds())) // I should get 4 but I get -31622396

}

https://go.dev/play/p/A-eHc-EPTrd

【问题讨论】:

    标签: go


    【解决方案1】:

    问题在于行 return t.Sub(time.Time{}), nil。你从 t 中减去 time.Time 的零值,这相当于从 t 中减去 Unix 纪元时间。

    要从字符串中获取持续时间,您应该改用 time.ParseDuration() :

    duration, err := time.ParseDuration(input)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(int(duration.Seconds()))
    

    这将正确解析字符串中的持续时间,您将获得预期的输出 4。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-07
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多