【发布时间】:2017-07-22 00:53:15
【问题描述】:
我编写了以下代码来查找两个日期之间的天数
startDateValue = new Date(startDate);
endDateValue = new Date(endDate);
long diff = endDateValue.getTime() - startDateValue.getTime();
long seconds = diff / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
long days = (hours / 24) + 1;
Log.d("days", "" + days);
当开始日期和结束日期分别为 2/3/2017 和 3/3/2017 时,显示的天数为 29。虽然它们是同一天,但显示为 1。(天数需要一个请假。所以如果一个人请一天假,他必须选择相同的开始和结束日期。所以在这种情况下,他请了两天假。
我做错了什么? 感谢您的宝贵时间。
注意:请不要使用日期构造函数。检查下面接受的答案。使用 simpledateformat 或 Joda 时间。日期构造函数已弃用。
【问题讨论】:
-
startDate和endDate到底是什么? (我们目前甚至不知道他们的类型。)如果您可以改用 Joda Time,那会更好很多,顺便说一句。 -
@JonSkeet startDate = (string)2/3/2017 endDate = (string)3/3/2017
-
所以您使用的是已弃用的
Date(String)构造函数?我会停止这样做,开始。我建议使用具有特定格式的SimpleDateFormat并使用 UTC 时区。 (很可能由于 DST 转换,您得到了错误的结果 - 如果不知道您所在的时区,就很难知道。) -
很高兴听到这个消息。该构造函数在 20 多年前已被弃用:)
-
仅供参考,麻烦的旧日期时间类,如
java.util.Date、java.util.Calendar和java.text.SimpleDateFormat现在是 legacy,被 Java 8 和 Java 9 中内置的 java.time 类所取代. 见Tutorial by Oracle。 请参阅modern Answer by Anton Balaniuc。
标签: java android date datetime kotlin