【发布时间】:2014-05-26 15:14:51
【问题描述】:
我有两个日期,但一个是 CET,另一个是 CEST。
Calendar calFrom = Calendar.getInstance();
calFrom.set( 2013, 2, 20,0,0,0);
Calendar calTo = Calendar.getInstance();
calTo.set( 2013, 3, 5,0,0,0);
long daysPassed= (calTo.getTime().getTime() - calFrom.getTime().getTime()) / (1000 * 60 * 60 * 24);
System.out.println("calFrom: " + calFrom.getTime());
System.out.println("calTo: " + calTo.getTime());
System.out.println("daysPassed: " + daysPassed);
输出显示:
calFrom: Wed Mar 20 00:00:00 CET 2013
calTo: Fri Apr 05 00:00:00 CEST 2013
daysPassed: 15
但是微软的excel说这两天的差是16!
如何像 Excel 一样计算过去的天数?
【问题讨论】:
-
你是说Java计算忽略时区偏移? Calendar.getTime() Javadoc 说:“返回一个 Date 对象,表示此日历的时间值(与 Epoch 的毫秒偏移量”)。”这可能是原因,即它从 Epoch 获取时间,而不考虑时区。在 Java 中8、有一个新的Date-Time API,取代了以前JDK中现有的Calendar和Date API。见这里:oracle.com/technetwork/articles/java/…尤其是'Duration'部分。我自己从来没有尝试过。如果这能解决你的问题,请分享它。
-
感谢您的回复,我知道 Java 8 有一个新的日期 API,但在我的公司我们还不能使用 Java 8。:)
标签: java excel date time timezone