如何减去2个java.sql.Date日期?

时间:2011-08-05 22:07:20

标签: java date date-arithmetic

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

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

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

唯一的问题是它给了我十进制数。例如:3.3442346529103816 现在我必须在Java内部决定给定的数字是4天中的3天。 它的代码适用于在youtube上搜索某个术语的应用程序,并将有关每日视图的统计数据写入数据库。用户能够例如每天在20:00安排工作。但是他可以决定在10点重新安排这份工作,所以程序必须明白,差别就是有一天。所以很明显,我必须绕到第一个更大的数字。是否有一些方法或我必须自己写?

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);

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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方法。

相关问题