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
相关产品推荐
相关产品推荐

