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

如何在GO struct中处理JSON的日期字段 实现指定格式导出Excel

实现步骤

你可以通过自定义支持JSON反序列化的时间类型,结合Go标准库time完成需求,具体操作如下:

1. 自定义适配日期格式的时间类型

你JSON里的日期是2006-01-02T15:04:05.000-0700格式,自定义类型实现JSON反序列化接口,反序列化时自动把字符串转成标准时间类型:

package main

import "time"

// CustomTime 自定义可序列化时间类型
type CustomTime time.Time

// 匹配JSON日期格式的布局字符串
const jiraTimeLayout = "2006-01-02T15:04:05.000-0700"

// UnmarshalJSON 实现JSON反序列化接口
func (ct *CustomTime) UnmarshalJSON(data []byte) error {
	// 处理空值、null的情况
	if len(data) < 2 || string(data) == `""` || string(data) == "null" {
		*ct = CustomTime(time.Time{})
		return nil
	}
	// 移除JSON字符串两端的引号
	timeStr := string(data[1 : len(data)-1])
	// 按指定布局解析时间
	parseTime, err := time.Parse(jiraTimeLayout, timeStr)
	if err != nil {
		return err
	}
	*ct = CustomTime(parseTime)
	return nil
}

// Time 快速转为标准time.Time类型
func (ct CustomTime) Time() time.Time {
	return time.Time(ct)
}

2. 修改结构体字段类型

把原本的string类型替换为自定义的CustomTime:

// 你的字段结构体修改后示例
type Fields struct {
	Resolved CustomTime `json:"resolutiondate,omitempty"`
	Created  CustomTime `json:"created,omitempty"`
	Updated  CustomTime `json:"updated,omitempty"`
	// 其余字段保持不变
}

JSON反序列化时会自动调用你实现的UnmarshalJSON方法,不用额外手动处理转换逻辑。

3. 导出Excel时指定日期格式

主流Go Excel库(比如excelize、xlsx)都原生支持time.Time类型识别,你可以直接写入时间值后设置单元格格式为mm/dd/yyyy,这样Excel会识别为日期类型而非字符串:

示例(基于excelize库):

// 1. 转换为标准time.Time类型
createdTime := yourStruct.Fields.Created.Time()
// 跳过空值
if createdTime.IsZero() {
	// 空值逻辑自行处理,比如填空字符串
}
// 2. 写入单元格值,excelize会自动识别为日期类型
file.SetCellValue("Sheet1", "A2", createdTime)
// 3. 设置单元格格式为mm/dd/yyyy
dateStyle, err := file.NewStyle(&excelize.Style{
	NumFmt: 14, // 内置格式14对应mm/dd/yyyy,也可以自定义为"mm/dd/yyyy"
})
if err == nil {
	file.SetCellStyle("Sheet1", "A2", "A2", dateStyle)
}

如果你用的库不支持直接传入time.Time:

手动格式化为mm/dd/yyyy格式的字符串即可:

dateStr := createdTime.Format("01/02/2006")

注意:Go的时间布局必须用2006-01-02 15:04:05这个固定参考时间的对应格式,01代表月、02代表日、2006代表年,刚好匹配你要的mm/dd/yyyy格式。


内容的提问来源于stack exchange,提问作者dig_123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:48:02