【问题标题】:Date difference using Java [duplicate]使用Java的日期差异[重复]
【发布时间】:2020-06-21 21:32:12
【问题描述】:

我的发票中有两个日期期间,

总账单期 - 2019 年 11 月 6 日至 2020 年 2 月 3 日(字符串)

价格变动期 - 2020 年 1 月 22 日至 2020 年 2 月 3 日(字符串)

所以总账单期限为 90 天,其中从 2020 年 1 月 22 日到 2020 年 2 月 3 日有 13 天的价格变化。

我需要获取非价格变动日的账单期,即 2019 年 11 月 6 日至 2020 年 1 月 21 日。

获得这些日期之间差异的最佳方法是什么?

提前致谢!

【问题讨论】:

  • 不清楚您的数据是什么。您是否将日期作为给定格式的字符串?每个账单周期是否只有一个价格变动周期?
  • 你可能想要Period.between
  • @VGR 或者对于 总帐单期限为 90 天 或者 ChronoUnit.DAYS.between()。无论如何,这一切都在链接的原始问题的答案中。
  • @Felix 是的,只有一次价格变化..

标签: java date


【解决方案1】:

假设我的评论中的假设成立,并且您有这样的字符串:

String billPeriodStart   = "6 Nov 2019";
String billPeriodEnd     = "3 Feb 2020";
String changePeriodStart = "22 Jan 2020";
String changePeriodEnd   = "3 Feb 2020";

这样的事情可能会起作用(未经测试):

SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy");
Date billPeriodStartDate = dateFormat.parse(billPeriodStart);
// same for the other values

Calendar cal = Calendar.getInstance();

cal.setDate(changePeriodStartDate);
cal.add(Calendar.DAY, -1);
Date dateBeforeChangePeriod = cal.getTime();

cal.setDate(changePeriodEndDate);
cal.add(Calendar.DAY, 1);
Date dateAfterChangePeriod = cal.getTime();

boolean hasDaysBeforeChangePeriod = !dateBeforeChangePeriod.before(billPeriodStartDate);
boolean hasDaysAfterChangePeriod  = !dateAfterChangePeriod.after(billPeriodEndDate);

if (hasDaysBeforeChangePeriod) {
  // print billPeriodStartDate to dateBeforeChangePeriod 
}
if (hasDaysAfterChangePeriod) {
  // print dateAfterChangePeriod to billPeriodEndDate
}
if (!hasDaysBeforeChangePeriod && !hasDaysAfterChangePeriod) {
  // print "none"
}

【讨论】:

  • 请不要教年轻人使用早已过时且臭名昭著的SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API, 和它的DateTimeFormatter 中做得更好。
猜你喜欢
  • 1970-01-01
  • 2012-02-17
  • 2011-05-06
  • 2015-12-19
  • 2015-03-23
  • 1970-01-01
  • 2015-04-27
  • 2011-11-15
  • 1970-01-01
相关资源
最近更新 更多