Go语言中int64转datetime字符串触发strconv.ParseInt错误,求原因
问题原因及解决方案
问题描述
我在数据库中使用int64类型字段存储Unix时间戳,希望将其转换为常规的datetime字符串展示给用户,但执行过程中出现错误。
示例代码:
package main import ( "fmt" "strconv" ) func main() { var a int64 a = 1658545089 tm, err := strconv.ParseInt(string(a), 10, 64) if err != nil { panic(err) } fmt.Println(tm) }
运行报错:
panic: strconv.ParseInt: parsing "�": invalid syntax
错误原因
核心问题出在string(a)这一行。Go语言中直接将int64类型转换为string时,会把数值当作Unicode码点解析成对应的字符,而不是把数字转换成它的字符串形式。比如你的int64值1658545089对应的是一个无法正常显示的乱码字符(即报错里的"�"),之后用strconv.ParseInt去解析这个乱码字符串,自然会触发语法错误。
而且你的代码逻辑本身就没必要:你已经有了int64类型的时间戳,完全不需要再用strconv.ParseInt去解析,这属于多此一举的操作。
正确解决方案
要把int64类型的Unix时间戳转换为常规datetime字符串,直接使用time包的Unix方法即可,示例代码如下:
package main import ( "fmt" "time" ) func main() { var a int64 a = 1658545089 // 将秒级Unix时间戳转换为time.Time对象 t := time.Unix(a, 0) // 格式化为你需要的datetime字符串格式 fmt.Println(t.Format("2006-01-02 15:04:05")) }
如果只是单纯需要把int64数字转换成对应的字符串(比如后续要处理字符串形式的数字),应该使用strconv.FormatInt(a, 10),而不是直接string(a)。
内容的提问来源于stack exchange,提问作者Kum
相关产品推荐
相关产品推荐

