Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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/3/android/234.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
Java 三月份两个日期之间天数的错误差异_Java_Android_Datetime - Fatal编程技术网

Java 三月份两个日期之间天数的错误差异

Java 三月份两个日期之间天数的错误差异,java,android,datetime,Java,Android,Datetime,我试图计算三月份两个日期之间的天数,但我得到了错误的结果 当dateBefore为2017年3月1日且dateAfter为2017年3月31日时,diff为29天,但应为30天(31-1) 我建议不要使用java.util.Date。有点尴尬。如果允许使用第三方库,我建议使用JSR-310后端口 因为您使用的是Android,所以您需要像在标准Java 7项目中一样包含此库,即使您使用的是jack编译器,因为Android SDK中还没有时间 安装程序 在应用程序的build.gradledep

我试图计算三月份两个日期之间的天数,但我得到了错误的结果

dateBefore
为2017年3月1日且
dateAfter
为2017年3月31日时,
diff
为29天,但应为30天(31-1)


我建议不要使用
java.util.Date
。有点尴尬。如果允许使用第三方库,我建议使用JSR-310后端口

因为您使用的是Android,所以您需要像在标准Java 7项目中一样包含此库,即使您使用的是jack编译器,因为Android SDK中还没有时间

安装程序 在应用程序的
build.gradle
dependencies列表中,您可以添加threeten库的Android自适应:

compile "com.jakewharton.threetenabp:threetenabp:1.0.4"
…如果您需要能够运行使用Three-Ten的标准Java单元测试,您可以通过添加此项来排除Android部分,并包括Three-Ten库本身(如果您使用Roboelectric,可能没有必要,但我不能100%确定):

然后,您需要在应用程序中初始化Android库:

// e.g. in your Application subclass
@Override
public void onCreate() {
    AndroidThreeTen.init(this);
}
用法 现在您可以执行以下操作:

LocalDate dateBefore = LocalDate.of(2017, 3, 1);
LocalDate dateAfter = LocalDate.of(2017, 3, 31);
long daysBetween = ChronoUnit.DAYS.between(dateBefore, dateAfter);
assertEquals(30, daysBetween); 

我建议不要使用
java.util.Date
。有点尴尬。如果允许使用第三方库,我建议使用JSR-310后端口

因为您使用的是Android,所以您需要像在标准Java 7项目中一样包含此库,即使您使用的是jack编译器,因为Android SDK中还没有时间

安装程序 在应用程序的
build.gradle
dependencies列表中,您可以添加threeten库的Android自适应:

compile "com.jakewharton.threetenabp:threetenabp:1.0.4"
…如果您需要能够运行使用Three-Ten的标准Java单元测试,您可以通过添加此项来排除Android部分,并包括Three-Ten库本身(如果您使用Roboelectric,可能没有必要,但我不能100%确定):

然后,您需要在应用程序中初始化Android库:

// e.g. in your Application subclass
@Override
public void onCreate() {
    AndroidThreeTen.init(this);
}
用法 现在您可以执行以下操作:

LocalDate dateBefore = LocalDate.of(2017, 3, 1);
LocalDate dateAfter = LocalDate.of(2017, 3, 31);
long daysBetween = ChronoUnit.DAYS.between(dateBefore, dateAfter);
assertEquals(30, daysBetween); 

这是唯一的日期吗?你必须告诉我们确切的输入才能知道。我的猜测是,你正在经历一段时间,当时钟在你考虑的任何时区前进时,导致的时差略小于30*24小时。但是如果没有更多的信息,我们不可能知道。顺便说一句,2017年3月12日星期日是“夏令时”…谢谢大家。现在我试着使用joda Times这是唯一的日期吗?你必须给我们显示准确的输入,让我们知道。我的猜测是,你正在经历一段时间,当时钟在你考虑的任何时区前进时,导致的时差略小于30*24小时。但是如果没有更多的信息,我们不可能知道。顺便说一句,2017年3月12日星期日是“夏令时”…谢谢大家。现在我尝试使用joda Time如果您将2016.01.01 23:30与2016.01.02 18:30进行比较,这将只计算“完整天数”,当使用
LocalDateTime
时,它将返回0天的差异更正。这就是为什么这里使用
LocalDate
ChronoUnit.DAYS.between
接受
Temporal
参数,该参数可以是
LocalDateTime
,但这会导致您的日期时间未注册为全天的差异。如果您将2016.01.01 23:30与2016.01.02 18:30进行比较,这将只计算“全天”,它将返回0天的差异更正,改用
LocalDateTime
时。这就是为什么这里使用
LocalDate
ChronoUnit.DAYS.between
接受
Temporal
参数,这些参数可以是
LocalDateTime
,但这会导致您的日期时间不能注册为全天的时间差。