我有两个日期的字符串格式" 2017年2月16日"," 2017年2月26日" 我用了
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MMM-yyyy");
但是我无法得到像" 10"。
这样的确切结果答案 0 :(得分:2)
希望这会对你有帮助。在myDate和time_ago中传递你的日期。
int totalMin;
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.ENGLISH);
Date systemDate = Calendar.getInstance().getTime();
String myDate = sdf.format(systemDate);
Date Date1 = null;
try {
Date1 = sdf.parse(myDate);
} catch (ParseException e) {
e.printStackTrace();
}
Date Date2 = null;
try {
Date2 = sdf.parse(time_ago);
} catch (ParseException e) {
e.printStackTrace();
}
assert Date2 != null;
assert Date1 != null;
long millse = Date1.getTime() - Date2.getTime();
long mills = Math.abs(millse);
Hours = (int) (mills / (1000 * 60 * 60));
Mins = (int) (mills / (1000 * 60)) % 60;
Secs = (int) (mills / 1000) % 60;
long diffDays = millse / (24 * 60 * 60 * 1000);
if (Secs >= 60) {
Mins = Mins + 1;
Secs = Secs - 60;
} else if (Mins >= 60) {
Hours = Hours + 1;
Mins = Mins - 60;
}
totalMin = (int) ((Mins) + (Secs / 60));
String t_time;
if (diffDays > 0) {
if (diffDays == 1) {
t_time = diffDays + " day";
} else {
t_time = diffDays + " days";
}
} else if (Hours > 0) {
if (Hours == 1) {
t_time = Hours + " hour";
} else {
t_time = Hours + " hours";
}
} else if (Mins > 0) {
if (Mins == 1) {
t_time = totalMin + " minute";
} else {
t_time = totalMin + " minutes";
}
} else {
if (Secs == 1) {
t_time = Secs + " second";
} else {
t_time = Secs + " seconds";
}
}
答案 1 :(得分:1)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
java.time.LocalDate d1 = java.time.LocalDate.parse("16-Feb-2017", formatter);
java.time.LocalDate d2 = java.time.LocalDate.parse("26-Feb-2017", formatter);
Period until = d1.until(d2);
System.out.println("Dif: " + until.getDays());
答案 2 :(得分:0)
请使用以下代码初始化SimpleDateFormat。
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
答案 3 :(得分:0)
正如我在评论中所说,如果可以,请使用Java 8 java.time
类。 kamehl23’s answer告诉你如何。这是一个既优雅又强大的解决方案,也适用于夏季时间(DST)的变化。
java.time
向Java 6和7的后端调整,所以我很想尝试一下。
当然可以通过Java 1.1 Calendar
完成。夏季时间变化的解决方案是:
String formattedDate1 = "16-Feb-2017";
String formattedDate2 = "26-Feb-2017";
DateFormat df = new SimpleDateFormat("dd-MMM-yyyy", YOUR_LOCALE);
Date d1 = df.parse(formattedDate1);
Calendar cal1 = Calendar.getInstance();
cal1.setTime(d1);
Date d2 = df.parse(formattedDate2);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(d2);
int daysBetween = 0;
while (cal1.before(cal2)) {
daysBetween++;
cal1.add(Calendar.DATE, 1);
}
System.out.println(daysBetween);
这会打印10
。它既不优雅也不高效,但只要'from'日期在'到'日期之前(或相同)(可以很容易地检查),它就可以稳健地工作。