【问题标题】:Differences between two dates [duplicate]两个日期之间的差异[重复]
【发布时间】:2018-06-24 11:42:29
【问题描述】:

考虑下面的代码。我正在计算两个日期之间的天数差异。但是,有时输出无效。有谁知道这怎么可能?不要担心闰年。

SimpleDateFormat myFormat = new SimpleDateFormat("dd-MM-yyyy")           
Date date1 = (Date) myFormat.parse(datenow);
Date date2 = (Date) myFormat.parse(factuurdatumList.get(i));
long difference = date1.getTime() - date2.getTime();
System.out.println("Days: " + TimeUnit.DAYS.convert(difference, TimeUnit.MILLISECONDS));
int openstaand = (int) TimeUnit.DAYS.convert(difference, TimeUnit.MILLISECONDS);

【问题讨论】:

  • 输入和输出是什么,应该是什么?
  • “输出有时无效” 怎么办?显示示例。但我敢打赌,无效输出是由跨越夏令时转换的日期引起的。
  • 在尝试提出更多问题之前,请先阅读How do I ask a question that is answerable?,这样您才能更好地准备好并能够提出一个广受欢迎且更重要的是可回答的问题。。跨度>
  • 我建议您避免使用 SimpleDateFormat 类。它不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 的表现要好得多。

标签: java date


【解决方案1】:

更新:更改日期和月份以允许使用单个数字,并添加示例日期和输出。

很简单,如果你停止使用旧的过时的Date 类。

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("d-M-uuuu");
LocalDate date1 = LocalDate.parse("23-6-2018", fmt);
LocalDate date2 = LocalDate.parse("23-12-2018", fmt);
long days = ChronoUnit.DAYS.between(date1, date2);
System.out.println("Days: " + days);

输出

Days: 183

看到这个code run live at IdeOne.com

【讨论】:

  • 给出 DataTimeParseException ,它无法解析 23-6-2018 ??仅将其更改为 d-M-uuuu 有效吗?也就是说,到时候也是要23-12吗?
  • 它不起作用?
  • 出于某种原因,几天会为我返回 DATE?什么鬼?
  • @NotDutch 不知道你在做什么。更新了答案以显示它是如何工作的。
  • 我明白了问题所在。它将天数输出为负数:P 我知道这对于新课程是相同的,但如果你用它计算东西..
猜你喜欢
  • 1970-01-01
  • 2014-01-18
  • 2017-04-29
  • 2012-04-03
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
相关资源
最近更新 更多