Java 如何获得两个日期之间的天数(包括时间)?
如何获得两个日期之间的天数,包括时间。例如,从今天晚上8点到另一天晚上8点之间的天数?我正在使用这个,但它是根据月份的日期给出的Java 如何获得两个日期之间的天数(包括时间)?,java,android,Java,Android,如何获得两个日期之间的天数,包括时间。例如,从今天晚上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 =
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;
}
使用
时间单位
:
public static int getDaysTillOmer(Date d1, Date d2) {
long diff = d2.getTime() - d1.getTime();
return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
使用
时间单位
:
public static int getDaysTillOmer(Date d1, Date d2) {
long diff = d2.getTime() - d1.getTime();
return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
用它来做
Duration
是来自JodaTime的类使用do it
Duration
是来自JodaTime的类假设您使用的是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
,以防止升级为long。假设您使用的是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
,以防止升级为long。您的计算(以及其中一个答案中的实现)仅适用于在不知道夏令时的时区中运行的系统。例如,德国时区(我居住的地方),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++;
}
}
}
您的计算(以及其中一个答案中的实现)仅适用于在不知道夏令时的时区中运行的系统。例如,德国时区(我居住的地方),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++;
}
}
}
请注意,JodaTime不是JDK的一部分,而是一个外部Java库。谢谢请注意,但是JodaTime不是JDK的一部分,而是一个外部Java库。谢谢,请告诉我们这节课是哪节课。java.util.Date还是java.sql.Date?@这个名字有关系吗
java.sql.Date
扩展了java.util.Date
,他使用的getTime
没有被java.sql.Date
重载。放松点,伙计。TGIT!是的,洛萨是对的。时间单位对我来说很有用,但请告诉我们这是哪门“日期”课。java.util.Date还是java.sql.Date?@这个名字有关系吗java.sql.Date
扩展了java.util.Date
,他使用的getTime
没有被java.sql.Date
重载。放松点,伙计。TGIT!是的,洛萨是对的。考虑到您的方法,时间单位对我有效,日期为2018-03-24 03:01:00和2018-03-25 03:02:00(欧洲/柏林时区)。您的方法将返回0
。零是正确的,因为只经过了23小时零1分钟。@该标记不是“两个日期之间有多少天”的常规含义。请使用日期2018-03-24 03:01:00和2018-03-25 03:02:00(时区为欧洲/柏林)尝试您的方法。您的方法将返回0
。零是正确的,因为只经过了23小时零1分钟。@该符号不是“两个日期之间有多少天”的常规含义。