我将这两个字符串作为输入字符串
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 )
答案 0 :(得分:2)
我找到了解决方案。 我知道最好的解决方案是使用Joda Time。但是现有代码的变化最小,我认为这种棘手的方式会更好。如果您发现任何缺点,请编辑此答案。
List<Date> dates = new ArrayList<Date>();
Calendar calendar = new GregorianCalendar();
calendar.setTime(dateChkIn);
Date result = null;
while (calendar.getTime().before(dateChkOut)){
result = calendar.getTime();
dates.add(result);
calendar.add(Calendar.DATE, 1);
}
System.out.println("DAYS CALCULATED BY NEW SOLUTION: " + dates.size());
newNumberOfNghtsCalc = (long) dates.size();
dates.clear();
这实际上减少了运行时间!
问题代码所需时间:275000(以纳秒为单位)
新解决方案所需时间:103000
答案 1 :(得分:1)
2016年3月13日美国东部时间到美国东部时间的更改时间。所以SimpleDateFormat
负责这一变化。
转到here
答案 2 :(得分:1)
差异是由夏令时造成的,2016年计划于2016年3月13日。在这里,您可以阅读一篇关于EDT and EST之间差异的简短文章。
答案 3 :(得分:1)
我建议您使用现代的 java.time
日期时间 API。
演示:
import java.time.Duration;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("M/d/uu", Locale.ENGLISH);
LocalDate dateChkIn = LocalDate.parse("03/12/16", dtf);
LocalDate dateChkOut = LocalDate.parse("03/14/16", dtf);
long days = ChronoUnit.DAYS.between(dateChkIn, dateChkOut);
System.out.println(days);
}
}
输出:
2
从 Trail: Date Time 了解现代日期时间 API。