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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:48:45