【问题标题】:How to subtract 2 java.sql.Date dates?如何减去 2 java.sql.Date 日期?
【发布时间】:2017-08-18 06:00:16
【问题描述】:

我将一些数据插入到 Sqlite 数据库中,并在插入前检查这一天的记录是否已经存在。要检查这一点,我必须查看天数是否> 0。例如,2011-8-6 和 2011-8-5 之间的差异(以天为单位)为 1。如何在 Java 中执行此操作?

编辑: 正如@RayToal 提到的,这可以在数据库中完成,所以我这样做了:

SELECT julianday('now') - julianday(Date(Date)) from VIDEO_HISTORY;

唯一的问题是它给了我十进制数。例如:3.3442346529103816 现在,如果给定的数字是 4 天中的 3 天,我必须在 Java 内部决定。 它的代码适用于在 youtube 上搜索某些术语并将有关每日浏览量的统计数据写入数据库的应用程序。用户可以安排工作,例如每天 20:00 点。但随后他可以决定在 10:00 点重新安排这项工作,因此程序必须理解这一点,就像差一天一样。所以很明显,我必须四舍五入到第一个更大的数字。有什么方法可以解决这个问题还是我必须自己写?

EDIT2:根据@Michael-O 提供的链接,这是最好的解决方案(使用 JodaTime):

DateTime start = new DateTime(new GregorianCalendar(2011, 8, 4).getTime());
DateTime end = new DateTime(new GregorianCalendar(2011, 8, 8).getTime());

int numberOfDays = Days.daysBetween(start.toDateMidnight(), end.toDateMidnight()).getDays();
System.out.println(numberOfDays);

【问题讨论】:

  • 2011-8-6 和 2011-8-6 的差值实际上是 0。顺便说一下,既然数据显然是存储在 DB 中的,你有什么理由不使用用于此的 SQL?
  • 既然你应该使用数据库来计算这个,我会说这个问题是stackoverflow.com/questions/289680/…的重复。如果出于某种原因您必须在 Java 中进行计算,请务必这样说。然后查看 Joda-Time。 :)
  • @BalucC 对不起,这是“lapsus calami”,我编辑了这个。
  • 仅供参考,Joda-Time 项目现在位于maintenance mode,团队建议迁移到java.time 类。见Tutorial by Oracle

标签: java date date-arithmetic


【解决方案1】:

您可能想咨询this 教程。此外,您应该考虑使用 Joda Time 的 Period 并在 stackoverflow 上咨询 this 答案。

【讨论】:

    【解决方案2】:

    如果您想要 日历天数(java.time 用语中的 Period),请使用(在 Java 8 中):

    import java.time.temporal.ChronoUnit;
    import java.time.LocalDate;
    ChronoUnit.DAYS.between(LocalDate.parse(from.toString()),LocalDate.parse(to.toString())
    

    (这避免了 Java 8 的 java.sql.Date API 中的 subtle bug

    如果您想要以天为单位的Duration(以 24 小时为单位的物理经过时间),请使用 Marcelo's 方法。

    【讨论】:

      猜你喜欢
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      相关资源
      最近更新 更多