deb*_*low 11 java datetime android date kotlin
我写了以下代码来查找两个日期之间的日期
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);
Run Code Online (Sandbox Code Playgroud)
当开始和结束日期分别为2017年2月3日和2017年3月3日时,显示的天数为29.虽然它们在同一天显示为1.(一天休假的天数.所以如果一个人休一天假,他必须选择相同的开始和结束日期.所以在这种情况下他休假了两天).
我究竟做错了什么?感谢您的时间.
Sac*_*wgi 25
您生成日期对象的代码:
Date date = new Date("2/3/2017"); //deprecated
Run Code Online (Sandbox Code Playgroud)
你得到28天作为答案,因为根据Date(String)构造函数它认为day = 3,month = 2和year = 2017
您可以将String转换为Date,如下所示:
String dateStr = "2/3/2017";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date date = sdf.parse(dateStr);
Run Code Online (Sandbox Code Playgroud)
使用上面的模板来制作Date对象.然后使用下面的代码计算两个日期之间的天数.希望这清楚这件事.
它可以如下完成:
long diff = endDateValue.getTime() - startDateValue.getTime();
System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));
Run Code Online (Sandbox Code Playgroud)
请检查链接
如果你使用Joda Time,它会更加简单:
int days = Days.daysBetween(date1, date2).getDays();
Run Code Online (Sandbox Code Playgroud)
请检查JodaTime
Wil*_* Hu 18
科特林
以下是计算从今天到某个日期的天数的示例:
val millionSeconds = yourDate.time - Calendar.getInstance().timeInMillis
leftDays.text = TimeUnit.MILLISECONDS.toDays(millionSeconds).toString() + "days"
Run Code Online (Sandbox Code Playgroud)
如果要计算两天,则更改:
val millionSeconds = yourDate1.time - yourDate2.time
Run Code Online (Sandbox Code Playgroud)
应该管用。
小智 9
public static int getDaysDifference(Date fromDate,Date toDate)
{
if(fromDate==null||toDate==null)
return 0;
return (int)( (toDate.getTime() - fromDate.getTime()) / (1000 * 60 * 60 * 24));
}
Run Code Online (Sandbox Code Playgroud)
不Android完全支持java-8?如果是,您可以简单地使用ChronoUnit 类
LocalDate start = LocalDate.of(2017,2,3);
LocalDate end = LocalDate.of(2017,3,3);
System.out.println(ChronoUnit.DAYS.between(start, end)); // 28
Run Code Online (Sandbox Code Playgroud)
或者同样的事情使用格式化程序
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/yyyy");
LocalDate start = LocalDate.parse("2/3/2017",formatter);
LocalDate end = LocalDate.parse("3/3/2017",formatter);
System.out.println(ChronoUnit.DAYS.between(start, end)); // 28
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,您需要从开始日期到结束日期的天数(包括在内)。
\n\n DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");\n\n String startDate = "2/3/2017";\n String endDate = "3/3/2017";\n\n LocalDate startDateValue = LocalDate.parse(startDate, dateFormatter);\n LocalDate endDateValue = LocalDate.parse(endDate, dateFormatter);\n long days = ChronoUnit.DAYS.between(startDateValue, endDateValue) + 1;\n\n System.out.println("Days: " + days);\nRun Code Online (Sandbox Code Playgroud)\n\n输出:
\n\n\n\n\n天数:2
\n
ChronoUnit.DAYS.between()为我们提供从开始日期(含)到结束日期(不含)的天数。因此,为了也包括结束日期,我们需要添加 1 天,就像您在问题中所做的那样。
您正在使用Date(String)构造函数。此构造函数自 1997 年以来已被弃用,因为它跨时区工作不可靠,因此不要使用它。而且它\xe2\x80\x99s有点神奇:至少我从来不知道我得到了什么。显然,它的2/3/2017意思是2017年2月3日,而你原本的意思是2017年3月2日。从2月3日到3月3日(含)是29天(因为2017年不是闰年)。这解释了为什么你得到 29。(如果有必要,我们可以通过文档拼写并找出为什么2/3/2017会这样解释,只有我\xe2\x80\x99d 发现这样做是毫无意义的浪费时间。)
您可以\xe2\x80\x99t 从毫秒转换。另请注意,不仅是问题,而且许多从毫秒转换为天的答案都是不正确的。这种转换假设一天始终为 24 小时。由于夏令时 (DST) 和其他时间异常,一天并不总是 24 小时。所有这些答案都会将一天计算得太少,例如,如果夏季开始时假期跨越春季间隙或春季提前。
\n\njava.time 在旧版和新版 Android 设备上都能很好地工作。它只需要至少Java 6。
\n\norg.threeten.bp子包中导入日期和时间类。java.time。java.time到 Java 6 和 7(ThreeTen for JSR-310)。小智 5
您使用什么日期格式?是d/M/yyyy还是M/d/yyyy?
d =日,M =月,yyyy =年
(请参阅:https : //developer.android.com/reference/java/text/SimpleDateFormat.html)
然后代码:
public static final String DATE_FORMAT = "d/M/yyyy"; //or use "M/d/yyyy"
public static long getDaysBetweenDates(String start, String end) {
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.ENGLISH);
Date startDate, endDate;
long numberOfDays = 0;
try {
startDate = dateFormat.parse(start);
endDate = dateFormat.parse(end);
numberOfDays = getUnitBetweenDates(startDate, endDate, TimeUnit.DAYS);
} catch (ParseException e) {
e.printStackTrace();
}
return numberOfDays;
}
Run Code Online (Sandbox Code Playgroud)
对于getUnitBetweenDates方法:
private static long getUnitBetweenDates(Date startDate, Date endDate, TimeUnit unit) {
long timeDiff = endDate.getTime() - startDate.getTime();
return unit.convert(timeDiff, TimeUnit.MILLISECONDS);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32504 次 |
| 最近记录: |