使用easyexcel进行excel读取时,发现对日期的转换不对,读取到的日期是一个dubble型的浮点数。比如说43458.234189814815
经查资料,这个浮点数其实就是excel内部存储时间的形式,也叫时间序列号

规则如下:
Excel将日期和时间存储为称为日期序列号或日期时序列号的数字。
当你在Excel中查看日期时,它实际上是一个常规数字,其格式设置为日期。如果将单元格格式更改为“常规”,则会看到基础日期序列号。
日期序列号的整数部分表示日期,小数部分表示时间。日期从1900年1月1日开始,即1/1/1900的日期序列号为1。

警告!1900年2月28日之后的Excel日期实际上是一天。Excel表现得好像1900年2月29日存在,但事实并非如此。
Microsoft故意在Excel中包含此错误,以便它与当时占据大部分市场份额的电子表格程序保持兼容;
但是这个bug,只要您的所有日期都晚于1900年3月1日,这不是问题。

日期
Excel中,这些被称为“日期序列号”,它们使我们能够进行数学计算并在公式中使用日期。

Excel日期序列号示例

“日期序列号”列显示日期序列号等效的“日期”列值。

例如,2017年1月1日有42736.即日期序号 , 2017年1月是42736天自 1899年12月31日。

提示:将日期序列号列格式化为日期,您将看到它们与日期列值相同。

时间
时间也使用序列号格式并表示为小数部分。

小时:由于24小时= 1天,我们可以推断24小时的时间序列号为1,可以格式化为24:00或12:00 AM或0:00显示的时间。而12小时或12:00的时间值为0.50,因为它是24小时或半天的一半,而1小时是0.41666’,因为它是一天的1/24。

分钟:由于1小时是一天的1/24,1分钟是1/60小时,我们也可以说1分钟是一天的1/1440,或者它的时间序列号是0.00069444’

秒:因为秒是1/60分钟,即1/60小时,即一天的1/24。我们还可以说一秒是1/86400的一天或时间序列号形式它是0.0000115740740740741 …

Excel时间序列号示例

日期和时间在一起
现在我们知道如何存储日期和时间,我们可以把它们放在一起 ddddd.tttttt

例如,2012年1月为10:00:00 am有日期时间的序列值40909.4166666667

40909是代表2012年1 月1 日的序列值,4166666667是10:00 AM和00秒的十进制值。

知道以上规则,我们可以自己手写一个转换方法,虽然poi里面也内置了这个方法,但是没有必要为了转换一个日期而引入如此庞大的框架。

 /*** 解析时间 43458.234189814815   解析秒数的例子*/public static LocalTime getTime(double d) {//全部转成秒int sec = (int) (d * 86400);//时int s = sec / 3600;//分int h = sec % 3600 / 60;//秒int m = sec % 3600 % 60;String ss = s + "";String hh = h + "";String mm = m + "";if (s < 10) {ss = "0" + ss;}if (h < 10) {hh = "0" + hh;}if (m < 10) {mm = "0" + mm;}LocalTime time = LocalTime.parse(ss + ":" + hh + ":" + mm);return time;}

不过推荐使用这个方法 是从poi里面截取出来的
/**
* @param use1904windowing
* @param value
* @return
*/
public String getPOIDate(boolean use1904windowing, double value) {
log.info("getDate: " + value);
int wholeDays = (int) Math.floor(value);
int millisecondsInDay = (int) ((value - (double) wholeDays) * 8.64E7D + 0.5D);
Calendar calendar = new GregorianCalendar();
short startYear = 1900;
byte dayAdjust = -1;
if (use1904windowing) {
startYear = 1904;
dayAdjust = 1;
} else if (wholeDays < 61) {
dayAdjust = 0;
}
calendar.set(startYear, 0, wholeDays + dayAdjust, 0, 0, 0);
calendar.set(Calendar.MILLISECOND, millisecondsInDay);
if (calendar.get(Calendar.MILLISECOND) == 0) {
calendar.clear(Calendar.MILLISECOND);
}
Date date = calendar.getTime();
SimpleDateFormat s = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
return s.format(date);
}

使用eaysexcel时里面的日期转换问题相关推荐

  1. plsql日期转换错ORA-01830

    plsql编写脚本时遇到一个日期转换的问题,如果在plsql调试时,脚本可以正常执行,但是程序调用时,就会报错ORA-01830: 日期格式在转换整个输入字符串之前结束 to_date('2004-0 ...

  2. oracle的日期时间转换日期,oracle 的时间日期转换函数

    http://hi.baidu.com/cuigq_hr/blog/item/ba2bc167ed79022eaa184c34.html 1.有sysdate转换后的日期的例子总结: select t ...

  3. 怎么将mysql的时间转为星期_Mysql的日期转换成星期[某天对应周几]

    |-- 应用中会有各种不同的需求,要灵活应对:比如拿到某一日期要知道是周几 |--DAYOFWEEK(date) [返回日期date的星期索引(1=星期天,2=星期一, --7=星期六).这些索引值对 ...

  4. mysql 日期时间格式化字符串_MySQL日期函数与日期转换格式化函数大全

    Mysql作为一款开元的免费关系型数据库,用户基础非常庞大,本文列出了MYSQL常用日期函数与日期转换格式化函数 1.DAYOFWEEK(date) SELECT DAYOFWEEK('2016-01 ...

  5. SQL CONVERT在日期转换中的使用示例

    --字符转换为日期时,Style的使用 --1. Style=101时,表示日期字符串为:mm/dd/yyyy格式 SELECT CONVERT(datetime,'11/1/2003',101) - ...

  6. atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换

    atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 可以选择的模式: 表格模式,责任链模式 1 3 ...

  7. Hive 数仓中常见的日期转换操作

    (1)Hive 数仓中一些常用的dt与日期的转换操作 下面总结了自己工作中经常用到的一些日期转换,这类日期转换经常用于报表的时间粒度和统计周期的控制中 日期变换: (1)dt转日期 to_date(f ...

  8. C#中把货币、日期转换成中文大写

    日期转换代码如下: /**//// <summary> /// 日期转换为中文大写 /// </summary> public class UpperConvert {     ...

  9. java中struts2日期_Struts2中Date日期转换的问题

    今天跑程序的时候莫名其妙的出现了下面的一个异常: java.lang.NoSuchMethodException:com.ca.agent.model.mybatis.ApprovalInforCan ...

最新文章

  1. Ubuntu 划词翻译
  2. java 常用正则表达式
  3. 【2021-12-06】爬取关键词图片 - 去掉重复图片
  4. web.xml文件的作用
  5. 【springboot】application.yml配置文件中数据库密码password加密后显示
  6. 软件工程简答题和应用题
  7. Julia : 进制之间转换
  8. SIP协议及与Freeswitch的关系
  9. DS18B20调试总结
  10. ps怎么对比原图快捷键_Photoshop最常用的10个快捷键,让你修图事半功倍!
  11. WebRoot和Web-Info区别
  12. AMAZEUI之iscroll 下滑刷新/上拉加载更多实例
  13. php坏处,cpu超频有什么坏处
  14. 检测和寻找木马隐藏的位置的方法
  15. KDJ指标短线交易技巧(图解)
  16. 和平精英怎么在电脑上玩?匹配手机最简单的方式玩你值得拥有
  17. Python手册--目录
  18. AdGuard推荐设置
  19. MySQL 详细下载安装配置教程
  20. 孙陶然:成功者风光的背后是和你一样的坎坷

热门文章

  1. Python的word文档读取doc读取
  2. 申请商标变更的注意事项有哪些?
  3. Java高级程序员面试经历
  4. SQL Server中Rowcount与@@Rowcount的用法
  5. lucas定理 学习笔记
  6. 亚马逊新手入门:论什么是跟卖?
  7. python poi爬取
  8. 突发!最新GPT-4接口 竟被CS学生爆破「开源GitHub」了!OpenAI威胁:不删除项目就起诉你!让你蹲牢房!...
  9. 点云体素下采样 ❤️(体素质心 | 体素中心)
  10. Session详解,学习Session,这篇文章就够了(包含底层分析和使用)