Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java7的日期差异(以天为单位)_Java_Date_Java 7_Jodatime_Date Difference - Fatal编程技术网

Java7的日期差异(以天为单位)

Java7的日期差异(以天为单位),java,date,java-7,jodatime,date-difference,Java,Date,Java 7,Jodatime,Date Difference,我的日期格式为:EEE,dd-MMM-yyy-HH:mm:ss-Z 例如 日期1:2018年9月10日星期一08:32:58 GMT 日期2:2018年9月11日星期二03:56:10 GMT 在上述情况下,我需要将日期差设置为1,但如果我使用joda日期时间或手动将日期转换为毫秒,则得到的值为0 供参考: 任何线索都会有帮助。 例如: Date date1 = new Date("Mon Sep 10 08:32:58 GMT 2018"); Date date2 = ne

我的日期格式为:
EEE,dd-MMM-yyy-HH:mm:ss-Z

例如

日期1:2018年9月10日星期一08:32:58 GMT

日期2:2018年9月11日星期二03:56:10 GMT

在上述情况下,我需要将日期差设置为1,但如果我使用
joda
日期时间或手动将日期转换为毫秒,则得到的值为0

供参考:

任何线索都会有帮助。 例如:

Date date1 = new Date("Mon Sep 10 08:32:58 GMT 2018");
Date date2 = new Date("Tue Sep 11 03:56:10 GMT 2018");
DateTime start = new DateTime(date1 );
DateTime end = new DateTime(date2);
int days = Days.daysBetween(start, end).getDays();
System.out.println("Date difference: " + days);
输出:日期差:0


正如前面的评论中所提到的,Joda Time计算全天并进行四舍五入。因此,在比较时需要跳过时间。使用Java.time比较日期时,类似的方法会起作用:

Date date1 = new Date("Mon Sep 10 08:32:58 GMT 2018");
Date date2 = new Date("Tue Sep 11 03:56:10 GMT 2018");
LocalDate start = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate end = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
long between = ChronoUnit.DAYS.between(start, end);

System.out.println("Date difference: " + between);

正如前面的评论中所提到的,Joda Time计算全天并进行四舍五入。因此,在比较时需要跳过时间。使用Java.time比较日期时,类似的方法会起作用:

Date date1 = new Date("Mon Sep 10 08:32:58 GMT 2018");
Date date2 = new Date("Tue Sep 11 03:56:10 GMT 2018");
LocalDate start = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate end = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
long between = ChronoUnit.DAYS.between(start, end);

System.out.println("Date difference: " + between);

Joda Time只计算整天,换句话说,将差值截断为整数。因此,如果两个值之间的间隔超过19个小时,则算作0天。如果要忽略日期的时间部分,请首先转换为
LocalDate

    int days = Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays();

(感谢您自己在评论中提供了具体的代码。既然您说它有效,我认为它应该是一个答案。)

Joda Time只计算整天,换句话说,将差值截断为整数。因此,如果两个值之间的间隔超过19个小时,则算作0天。如果要忽略日期的时间部分,请首先转换为
LocalDate

    int days = Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays();

(感谢您在评论中自己提供了具体的代码。既然您说它有效,我认为这是一个值得回答的问题。)

如果您使用的是您引用的代码示例,您应该注意,对于您的输入,它给出了0天,因为时差小于一整天,这四舍五入。添加了相关示例description@Roy我需要不考虑时间的天数差异。@Ole-谢谢提供信息!以下方法对我有效:int days=days.daysBetween(start.toLocalDate(),end.toLocalDate()).getDays();我建议迁移到JSR310库。java 6+提供了一个后端口,如果您使用的是您所引用的代码示例,您应该注意,对于您的输入,它给出了0天,因为时差小于一整天,这是四舍五入description@Roy我需要不考虑时间的天数差异。@Ole-谢谢提供信息!以下方法对我有效:int days=days.daysBetween(start.toLocalDate(),end.toLocalDate()).getDays();我建议迁移到JSR310库。java 6+提供了一个后端口。您使用的是java.time而不是Joda time吗?这是个好主意,但最好说清楚一点。是的,我在计算两者之间的天数时使用的是java.time而不是yodatime。谢谢你的建设性评论。答案更新为澄清。您使用的是java.time而不是Joda time吗?这是个好主意,但最好说清楚一点。是的,我在计算两者之间的天数时使用的是java.time而不是yodatime。谢谢你的建设性评论。答案更新为澄清。