Java 以天为单位计算两个日期之间的差异
对于我的大学项目(酒店管理系统),我需要计算两个日期之间的差异,我只需使用以下代码Java 以天为单位计算两个日期之间的差异,java,Java,对于我的大学项目(酒店管理系统),我需要计算两个日期之间的差异,我只需使用以下代码 txtarrivaldate.getDate(); txtdeparturedate.getDate(); long arrivalmillisec = txtarrivaldate.getDate().getTime(); // System.out.println(arrivalmillisec); long departuremillisec = txtdepartureda
txtarrivaldate.getDate();
txtdeparturedate.getDate();
long arrivalmillisec = txtarrivaldate.getDate().getTime();
// System.out.println(arrivalmillisec);
long departuremillisec = txtdeparturedate.getDate().getTime();
// System.out.println(departuremillisec);
long diffmilisec = (departuremillisec - arrivalmillisec);
long diffdays = (departuremillisec - arrivalmillisec) / (24 * 60 * 60 * 1000);
String noofdays = Long.toString(diffdays);
System.out.println(noofdays);
然而,我遇到了其他java项目,它们的代码如下所示
static final long ONE_HOUR = 60 * 60 * 1000L;
dt1=jDateChooser1.getDate();
dt2=jDateChooser2.getDate();
String strdtver1=(String) sdf.format(jDateChooser1.getDate());
String strdtver2=(String) sdf.format(jDateChooser2.getDate());
long diff=((dt2.getTime()-dt1.getTime()+ONE_HOUR)/(ONE_HOUR*24));
diffday=Long.toString(diff);
jTextField4.setText(diffday+" day(s)");
我不明白为什么在两次约会之间加了一个小时。我非常感谢你整理了这一混乱局面 这可能是因为时区不同(UTC与BST或其他)。第二种方法是在结束日期前增加一个小时来解决这个问题 我建议在应用程序启动时设置
default
时区,并让Java
处理timezone
转换,例如:
public static void main(String[] args) throws Exception {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = sdf.parse("2017-01-20");
Date d2 = sdf.parse("2017-01-28");
long diffdays = (d2.getTime() - d1.getTime()) / (24 * 60 * 60 * 1000);
System.out.println(diffdays);
}
另一种方法是使用Java8
的日期时间库来计算天数,例如:
public static void main(String[] args) throws Exception {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = sdf.parse("2017-01-20");
Date d2 = sdf.parse("2017-01-28");
long days = Duration.between(d1.toInstant(), d2.toInstant()).toDays();
System.out.println(days);
}
这是持续时间类的javadoc。这可能是因为时区不同(UTC与BST或其他)。第二种方法是在结束日期前增加一个小时来解决这个问题 我建议在应用程序启动时设置
default
时区,并让Java
处理timezone
转换,例如:
public static void main(String[] args) throws Exception {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = sdf.parse("2017-01-20");
Date d2 = sdf.parse("2017-01-28");
long diffdays = (d2.getTime() - d1.getTime()) / (24 * 60 * 60 * 1000);
System.out.println(diffdays);
}
另一种方法是使用Java8
的日期时间库来计算天数,例如:
public static void main(String[] args) throws Exception {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = sdf.parse("2017-01-20");
Date d2 = sdf.parse("2017-01-28");
long days = Duration.between(d1.toInstant(), d2.toInstant()).toDays();
System.out.println(days);
}
这是持续时间类的javadoc。正确
使用java.time
而且,您完全使用了错误的类
麻烦的旧日期时间类(date
,Calendar
等)现在是遗留的,被java.time类取代
Instant
不要使用java.util.Date
而使用Instant
。该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)
如果您需要与尚未更新为java.time的旧代码交互,请转换。查看添加到旧类的新方法
Instant instant = myJavaUtilDate.toInstant();
通常最好在UTC工作,尤其是在数据存储和数据交换方面。所以要经常使用Instant
类
时区
为了确定日期,我们需要确定日期。为了确定日期,我们需要时区。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,午夜过后几分钟,法国巴黎是一个新的一天,而魁北克山仍然是“昨天”
ZoneDateTime
应用时区(ZoneId
)以获取一个
ChronoUnit
不要试图自己计算日期时间。首先,假设每小时是60分钟,每天是24小时,以此类推。你错了。夏时制(DST)等反常现象和政客经常重新定义时区意味着这些假设是错误的。让java.time来计算
您似乎希望在两个时间点之间有几天的间隔。为此,请使用enum,它是TemporalUnit
的一个实现。当fedZonedDateTime
对象时,ChronoUnit
类对时区和异常(如DST转换)非常熟悉。请务必阅读类文档,了解并理解其在此类情况下的行为
long days = ChronoUnit.DAYS.between( zdtStart , zdtStop );
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 从哪里获得java.time类
- 后来
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门为Android采用了ThreeTen Backport(如上所述)
- 看
date
,Calendar
等)现在是遗留的,被java.time类取代
Instant
不要使用java.util.Date
而使用Instant
。该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)
如果您需要与尚未更新为java.time的旧代码交互,请转换。查看添加到旧类的新方法
Instant instant = myJavaUtilDate.toInstant();
通常最好在UTC工作,尤其是在数据存储和数据交换方面。所以要经常使用Instant
类
时区
为了确定日期,我们需要确定日期。为了确定日期,我们需要时区。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,午夜过后几分钟,法国巴黎是一个新的一天,而魁北克山仍然是“昨天”
ZoneDateTime
应用时区(ZoneId
)以获取一个
ChronoUnit
不要试图自己计算日期时间。首先,假设每小时是60分钟,每天是24小时,以此类推。你错了。夏时制(DST)等反常现象和政客经常重新定义时区意味着这些假设是错误的。让java.time来计算
您似乎希望在两个时间点之间有几天的间隔。为此,请使用enum,它是TemporalUnit
的一个实现。当fedZonedDateTime
对象时,ChronoUnit
类对时区和异常(如DST转换)非常熟悉。一定要把课堂文档读给k