问题起源
最近在写一个读取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"))
}