Heim >Backend-Entwicklung >Golang >Konvertieren Sie 00:33 in die Dauer in Golang

Konvertieren Sie 00:33 in die Dauer in Golang

王林
王林nach vorne
2024-02-06 08:24:11948Durchsuche

将 00:33 转换为 golang 中的持续时间

Frageninhalt

Ich habe eine Zeichenfolge „12:34“ im Format „mm:ss“ und möchte sie in time.duration konvertieren. Dafür wurde zu viel Zeit verschwendet. Was mache ich in diesem Code falsch:

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


Richtige Antwort


Der Nullwert der Typzeit ist 1. Januar, 1 Jahr 00:00:00.000000000 UTC.

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
}

fmt.println(time.time{})
// this prints 0001-01-01 00:00:00 +0000 utc
fmt.println(parseduration("00:04"))
// this prints 0000-01-01 00:00:04 +0000 utc

In Ihrem Fall sollten Sie ein start 对象,而不是直接使用 time.time{} definieren. Zum Beispiel

package main

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

var origin = time.Date(0, 1, 1, 0, 0, 0, 0, time.UTC)

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(origin), nil
}

func main() {
    input := "00:04"
    duration, err := parseDuration(input)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(duration.String()) // this prints 4s

}

https://www.php.cn/link/bdf0f5f84843f08f00912ae5292162f6

Das obige ist der detaillierte Inhalt vonKonvertieren Sie 00:33 in die Dauer in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen