簡體   English   中英

將 Excel 時間戳轉換為 java.sql.date

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM