[英]Convert Excel timestamp to java.sql.date
我正在從 Excel (2010) 中提取時間戳:
它顯示為“10.06.2015 14:24”。 excel的“內部表示”是“42165.6”。 最后一個是從 Excel 輸出的。
所以,現在,我想把這個時間戳解析成這樣的 Java 程序:
double input = 42165.6;
// long myLong = ???
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm");
System.out.println(sdf.format(new java.sql.Date(myLong)));
我怎么能在第 2 行中做到這一點?!
非常感謝您的幫助!!!
親切的問候
Excel 將日期存儲為自 1900 年 1 月以來的天數。這使得轉換為 Java 日期(自 1970 年 1 月 1 日以來的毫秒數)變得很尷尬。 如果無法以可讀格式導出它,則需要創建一個 Java 日歷,將其設置為 1900 年 1 月 1 日,然后添加天數。
這里是:
double excelDate = 42165.6;
int days = (int) excelDate; //number of days
int seconds = (int) ((excelDate-days) * 86400); //number of seconds in .6 days
//create calendar set to 01-Jan-1900
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 1900);
cal.set(Calendar.MONTH, 0);
cal.set(Calendar.DAY_OF_MONTH, 1);
//Add days and seconds to get required date/time
cal.add(Calendar.DATE, days-1);
cal.add(Calendar.SECOND, seconds);
//cal.getTime() returns a java.util.Date, print it out...
System.out.println(cal.getTime());
注意java.sql.Date
可以從java.util.Date
創建,如下所示:
java.util.Date utilDate = ....
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
從 excel 表示法到java.sql.Date
的最快方法是:
double excelInput = 42165.6;
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm");
System.out.println("---> "
+ sdf.format(new java.sql.Date(
(long) ((excelInput - 25569) * 86400 * 1000))));
Excel 存儲自 01-01-1900 以來的日期,自 01-01-1970 以來的java.sql.date
。 兩個日期之間正好相差 25569 天。 java.sql.Date
的構造函數需要自 01-01-1970 以來的毫秒數 (!),因此使用 "* 86400" 獲取秒數,然后使用 (* 1000) 獲取毫秒數。
就是這樣! ;)
將 42165.6 放入 excel 並格式化為日期會給出正確的日期6/10/15 14:24
。
對我來說,mrbela 和 NickJ 的答案都對 42165.6, 06/10/2015 09:23
09:23 和06/12/2015 03:25
的問題給出了錯誤的答案。 這似乎適用於我嘗試過的大多數示例。
對我有用的解決方案是使用Apache POI ,它是 Microsoft 文檔的 Java API。 這個問題非常相似,並且有引導我到 poi 的指示。
這是一個工作代碼示例。
double input = 42165.6;
Date date = DateUtil.getJavaDate(input);
System.out.println(new SimpleDateFormat("dd.MM.yyyy HH:mm").format(javaDate));
輸出正確的06/10/2015 14:24
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.