日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

使用eaysexcel时里面的日期转换问题

發布時間:2024/5/14 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用eaysexcel时里面的日期转换问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用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时里面的日期转换问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。