【发布时间】:2015-12-22 22:48:32
【问题描述】:
我将这两个字符串作为输入字符串
03/12/16
03/14/16
我制作了一个单个 SimpleDateFormatter 对象来获取这样的日期差异
DateFormat formatter = new SimpleDateFormat("MM/dd/yy",Locale.US);
Date dateChkIn = formatter.parse("03/12/16");
System.out.println("Checkin date at nights check - "+dateChkIn.toString());
Date dateChkOut = formatter.parse("03/14/16");
System.out.println("Checkout date at nights check - "+dateChkOut.toString());
Long numberOfNghtsCalc = ((dateChkOut.getTime() - dateChkIn.getTime()) / 86400000L);
System.out.println("number of nigts calculated - "+ numberOfNghtsCalc);
以下是我在服务器中的输出
Checkin date at nights check - Sat Mar 12 00:00:00 EST 2016
Checkout date at nights check - Mon Mar 14 00:00:00 EDT 2016
number of nigts calculated - 1
预期输出是 计算的 nigts 数 - 2 请注意从格式化程序返回的两个不同的时区
更新: 2016 年 3 月 13 日被视为 DST 更改日期。因此我的计算出错了。 (除以 86400000L)
【问题讨论】:
-
首先使用 Java 8 的 Time API 或 JodaTime 来计算日期之间的差异......您是否碰巧跨越了夏令时边界?
-
@MadProgrammer 感谢您的评论。但是我的系统使用的是 Java 1.5 。此代码在我的生产环境中。所有这些时间;它工作得很好。突然发生了这种情况。
-
好吧,Joda-Time 支持 Java 5,但你甚至可以使用
Calendar -
尝试在
SimpleDateFormat下方添加formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
标签: java datetime time simpledateformat dst