golang 读取excel(xlsx文件) 时间格式解析

本文讲述了作者在解析Excel文件中遇到的时间格式问题,通过发现Excel中的时间是基于1990-01-01的天数,如何使用`excelDateToDate`函数将43831转换为有效时间戳并解决时间显示问题的过程。
摘要由CSDN通过智能技术生成

问题起源

最近在写一个读取xlsx文件,并解析其中数据的项目,在所有的数据都就绪之后,却遇到了时间格式获取不正确的问题

时间格式

在这里插入图片描述

我查询到的结果

在这里插入图片描述

我的代码
func main() {
 f, err := excelize.OpenFile("./template.xlsx")
   if err != nil {
      log.Fatal(err)
   }
 rows := f.GetRows("Sheet1")
   for _, row := range rows {
        fmt.Println("row[1]: ", row[1])
   }
}

第一次尝试问题解决

通过查找官方issue,我得到了另一个结果,可以使用number_format方法,转化格式
在这里插入图片描述

由此,我得到了另一个结果,43831
在这里插入图片描述

我的代码
func main() {
 f, err := excelize.OpenFile("/Users/zheng/Desktop/template.xlsx")
   if err != nil {
        log.Fatal(err)
   }
 style, err := f.NewStyle(`{"number_format": 0}`)
   if err != nil {
        fmt.Println(err)
   }
 f.SetCellStyle("Sheet1", "B2", "B2", style)
   rows := f.GetRows("Sheet1")
   for _, row := range rows {
        fmt.Println("row[1]: ", row[1])
   }
}

第二次尝试解决问题

我发现,这个数字43831,是距离1990-00-01的天数,这就是所谓的excel时间,从而我得到了我想要的答案
在这里插入图片描述

我的代码
func excelDateToDate(excelDate string) time.Time {
    excelTime := time.Date(1899, time.December, 30, 0, 0, 0, 0, time.UTC)
    var days, _ = strconv.Atoi(excelDate)
   return excelTime.Add(time.Second * time.Duration(days*86400))
}
func main() {
    f, err := excelize.OpenFile("/Users/zheng/Desktop/template.xlsx")
   if err != nil {
    log.Fatal(err)
   }
    style, err := f.NewStyle(`{"number_format": 0}`)
   if err != nil {
    fmt.Println(err)
   }
    f.SetCellStyle("Sheet1", "B2", "B2", style)
   rows := f.GetRows("Sheet1")
   for _, row := range rows {
    fmt.Println("row[1]: ", row[1])
   }
    fmt.Println(excelDateToDate("43831"))
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值