同事在作将EXCEL导入数据库功能时发现一个奇怪的问题:在EXCEL中,有一列数据明明呈现出时间格式,好比:18:35
,但导到数据库中,竟然一串长长的小数:0.7743055555555556
,我靠,这是什么鬼。数据库
后来发现,原来EXCEL里面,其实就是小数,只不过,设置单元格格式为时间时,就呈现 时:分 这种友好的样子;当设置为文本时,马上原形毕露。markdown
怎么办呢?在网上寻寻觅觅,没有头绪。这是一种什么样的时间格式?或者说,这是一种什么样的时间?为何不是UTC?从1900年以来的,格林威治时间的秒数?spa
关键是要理清思路。原来,这个小数是 时分 在 一天 中的占比。也就是:code
(时 * 60 + 分 ) / 24 * 60
公式的意义不言而喻(同理,若是有秒,就将时间所有换算成秒再计算就好了),细想系统这么处理也是有道理的,时间格式那么多,索性所有换成数字最准确。为啥不是什么UTC之类,由于没有日期,只有时间。string
知道了缘由就简单了。咱们将EXCEL原本来本导入到数据库,呈现的时候,在页面换算一下就好了。换算方法以下:class
时 = 小数 *24 取整(不要四舍五入) 分 = (小数 * 24 * 60 )% 60