我如何获得两个日期之间的天数,包括时间。例如,今天晚上8点到其他日子晚上8点之间的天数?我正在使用它,但根据一个月的日子给出
public static int getDaysTillOmer(Date d1, Date d2) {
int daysdiff = 0;
long diff = d2.getTime() - d1.getTime();
long diffDays = diff / (24 * 60 * 60 * 1000);
daysdiff = (int) diffDays;
return daysdiff;
}
答案 0 :(得分:2)
使用TimeUnit
:
public static int getDaysTillOmer(Date d1, Date d2) {
long diff = d2.getTime() - d1.getTime();
return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
答案 1 :(得分:2)
您的计算(以及其中一个答案中的实施)仅适用于在不知道夏令时的时区中运行的系统。对于例如德国时区(我所居住的地方),2018-03-24 03:00:00
和2018-03-25 03:00:00
的持续时间我认为你希望有一天这个特殊日子只有23个小时的唯一问题。
如果你想坚持JVM提供的标准类,你可以使用日历并日复一日地添加它,直到基础日期在第二个日期之后。这是一个例子(没有健全性检查,例如第一个日期实际上是在第二个日期之前;在另一个案例中你将遇到无限循环)。该示例设置了显式使用的时区,因此它应该在您的系统上显示相同的结果:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class CalcDuration {
public final static void main(String[] args) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
Date d1 = sdf.parse("2018-03-24 03:00:00");
Date d2 = sdf.parse("2018-03-25 03:00:00");
System.out.println("duration1: " + getDuration(d1, d2));
}
private static int getDuration(Date d1, Date d2) {
Calendar c = Calendar.getInstance();
c.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
c.setTime(d1);
int days = 0;
while (true) {
c.add(Calendar.DAY_OF_YEAR, 1);
if (c.getTime().after(d2)) {
return days;
}
days++;
}
}
}
答案 2 :(得分:1)
使用Joda Time执行此操作。
public void calcDays(Date start,Date end) {
Duration d = new Duration(start.getTime(), end.getTime());
System.out.println("Number of days from dates "+d.getStandardDays());
}
Duration
是来自JodaTime的课程
答案 3 :(得分:1)
假设您正在使用java.util.Date
,那么您的算法非常好。我会稍微清理一下。
import java.util.Date;
public static int getDaysTillOmer(Date d1, Date d2) {
long diffDays = (d2.getTime() - d1.getTime()) / (24L * 60 * 60 * 1000);
return (int) diffDays;
}
此逻辑将天数截断为整数值。这是 2天,23小时和59分钟的时差将转换为: 2天。
另请注意,值24
已转换为24L
,以防止促销延长。