You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang从日期时间字符串提取时间返回00:00:00,求问题排查

问题分析与解决

你的代码返回00:00:00的核心原因有两个:

1. 使用了错误的时间解析格式(layout)

Go的time.Parse函数要求layout必须是参考时间Mon Jan 2 15:04:05 MST 2006的格式化形式,不能用任意的日期字符串(比如你写的"2014-09-12T11:45:26")。这个参考时间的每个数字都对应固定的时间分量,比如2006代表年份、01代表月份、15代表24小时制的小时数等。你用自定义日期作为layout,会导致解析逻辑完全混乱,最终解析失败。

2. 忽略了解析错误

你用_忽略了time.Parse的错误返回值,当解析失败时,变量t会被初始化为零值时间(相当于0001-01-01 00:00:00 +0000 UTC),调用Format自然会返回00:00:00。


修正后的代码

不需要手动截取字符串,直接用匹配输入格式的layout解析完整字符串即可:

import "time"

func GetTimeStr(d string) string {
    // 匹配输入格式:2022-09-23T16:28:19.846821Z
    layout := "2006-01-02T15:04:05.000000Z"
    t, err := time.Parse(layout, d)
    if err != nil {
        // 根据业务需求处理错误,比如返回空字符串或默认值
        return ""
    }
    return t.Format("15:04:05")
}

如果一定要保留截取字符串的逻辑,也要把layout改成正确的参考时间格式:

import "time"

func GetTimeStr(d string) string {
    // 正确的layout,对应YYYY-MM-DDTHH:MM:SS格式
    layout := "2006-01-02T15:04:05"
    if len(d) < len(layout) {
        return ""
    }
    d = d[:len(layout)]
    t, err := time.Parse(layout, d)
    if err != nil {
        return ""
    }
    return t.Format("15:04:05")
}

内容的提问来源于stack exchange,提问作者Bill Software Engineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:35:19