当前位置: > > > > 需要帮助将时间转换为秒,可以在 Golang 中处理小时和无小时
需要帮助将时间转换为秒,可以在 Golang 中处理小时和无小时
来源:stackoverflow
2024-04-29 21:00:35
0浏览
收藏
本篇文章向大家介绍《需要帮助将时间转换为秒,可以在 Golang 中处理小时和无小时》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。
问题内容
想要将持续时间更改为秒,但不想每次都给出小时(小时为可选)
package main
import (
"fmt"
)
func main() {
t1 := "01:30"
seconds, _ := ConvertTimeFormat(t1) // not working fine for this
fmt.Println(seconds)
t2 := "01:01:15"
second, _ := ConvertTimeFormat(t2) // working fine for this
fmt.Println(second)
}
func ConvertTimeFormat(st string) (int, error) {
var h, m, s int
n, err := fmt.Sscanf(st, "%d:%d:%d", &h, &m, &s)
fmt.Print(n, err)
if err != nil || n != 3 {
return 0, err
}
return h*3600 + m*60 + s, nil
}
正确答案
您的代码有错误,因为您总是期望 scanf 函数中有 3 个值。
尝试用另一种方式解析它,例如:
package main
import (
"errors"
"fmt"
"strconv"
"strings"
)
func main() {
t1 := "01:30"
seconds, _ := converttimeformat(t1) // not working fine for this
fmt.println(seconds)
t2 := "01:01:15"
second, _ := converttimeformat(t2) // working fine for this
fmt.println(second)
}
func converttimeformat(st string) (int, error) {
var sh, sm, ss string
parts := strings.split(st, ":")
switch len(parts) {
case 2:
sm = parts[0]
ss = parts[1]
case 3:
sh = parts[0]
sm = parts[1]
ss = parts[2]
default:
return 0, errors.new("invalid format")
}
var (
h, m, s int
err error
)
if sh != "" {
h, err = strconv.atoi(sh)
if err != nil {
return 0, err
}
}
m, err = strconv.atoi(sm)
if err != nil {
return 0, err
}
s, err = strconv.atoi(ss)
if err != nil {
return 0, err
}
return h*3600 + m*60 + s, nil
}
另一个解决方案是处理错误并尝试以另一种格式解析它:
func ConvertTimeFormat(st string) (int, error) {
var h, m, s int
_, err := fmt.Sscanf(st, "%d:%d:%d", &h, &m, &s)
fmt.Println(h, m, s, err)
if err != nil {
h, m, s = 0, 0, 0
_, err = fmt.Sscanf(st, "%d:%d", &m, &s)
if err != nil {
return 0, err
}
}
return h*3600 + m*60 + s, nil
}
今天关于《需要帮助将时间转换为秒,可以在 Golang 中处理小时和无小时》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注米云公众号!
