xlsx时间格式为浮点golang读取并正常格式化的方法

xlsx时间格式为浮点golang读取并正常格式化的方法

遇到的问题:golang读取xlsx的时间发现初始化失败,得到0000-00-00 00:00:00的结果。
xlsx里面看到的时间是这样的: 2020-11-04 16:11:38, 保存在row[0]
所以使用了 xlsxDate, _ = time.Parse(“2006-01-02 15:04:05”, row[0])
结果格式化失败

打开xlsx文件点击row[0]上去是2021/11/4 4:11:38 PM
打印日志实际读到原始的row[0]是44139.6747569444

44139.6747569444这究竟是个啥

查了资料,44139是懂1900-01-01之后运行的天数数,0.6747569444 也是天数,只不过是大半天,0.5就是12小时 这样
那这就可以运算了

给出测试函数过程

tDate1900, _ := time.Parse("2006/1/2", "1900/1/1")

// 因为不知道什么原因会多2天,所以扣掉2天才能得到正确结果,如果谁知道怎么回事可以告诉我下
prevMonth := tDate1900.AddDate(0, 0, 44139-2)
fmt.Printf("算到今天是哪一天 %v  \n", prevMonth)
fmt.Printf("时间戳转换为秒的结果 %v  \n", prevMonth.Unix())
// -28800是因为prevMonth.Unix()会多8小时,需要扣除掉,原因不清楚
tm := time.Unix(prevMonth.Unix()+int64(math.Floor(0.6747569444*24*60*60))-28800, 0)
fmt.Println(tm)

最终tm可以得到正确的结果2020-11-04 16:11:38,咱们可以把这个改成一个函数

func GetXlsxTimeValues(xlsxTime string)  (localTime time.Time) {

	ledgerDate1900, _ := time.Parse("2006/1/2", "1900/1/1")
	fTime, _ := strconv.ParseFloat(xlsxTime, 64)
	nTime := int(math.Floor(fTime))
	prevMonth := ledgerDate1900.AddDate(0, 0, int(math.Floor(fTime))-2)
	localTime = time.Unix(prevMonth.Unix()+int64(math.Floor((fTime-float64(nTime))*86400))-28800, 0)
	return
}

吼吼吼,还没有查到中文的解决这个问题的文章,怕不是我是第一个

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
读取Excel文件的格式可以使用Java中的Apache POI库来实现。具体步骤如下: 1. 引入相关依赖包 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2. 读取Excel文件 使用WorkbookFactory类的create方法读取Excel文件,代码如下: ``` File file = new File("test.xlsx"); Workbook workbook = WorkbookFactory.create(file); ``` 3. 获取Sheet 获取要操作的Sheet,可以使用Workbook的getSheet方法或getSheetAt方法,代码如下: ``` Sheet sheet = workbook.getSheet("Sheet1"); ``` 4. 设置格式 使用CellStyle类来设置单元格的格式,例如设置单元格的背景颜色和字体样式,代码如下: ``` // 获取单元格样式 CellStyle cellStyle = workbook.createCellStyle(); // 设置背景颜色 cellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 设置字体样式 Font font = workbook.createFont(); font.setFontName("Arial"); font.setFontHeightInPoints((short) 16); font.setBold(true); cellStyle.setFont(font); // 设置单元格格式 Row row = sheet.getRow(0); Cell cell = row.getCell(0); cell.setCellStyle(cellStyle); ``` 其中,setFillForegroundColor方法设置背景颜色,setFillPattern方法设置填充模式,setFontName方法设置字体名称,setFontHeightInPoints方法设置字体大小,setBold方法设置是否加粗。 5. 保存文件 最后使用Workbook的write方法将修改后的Excel文件保存到本地,代码如下: ``` FileOutputStream outputStream = new FileOutputStream("test.xlsx"); workbook.write(outputStream); outputStream.close(); workbook.close(); ``` 以上就是Java读取Excel文件并设置格式的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值