根据this question,我计算了java中两个日期之间的天数。 该计划位于
之下SimpleDateFormat myFormat = new SimpleDateFormat("dd MM yyyy");
String inputString1 = "23 01 1997";
String inputString2 = "27 04 1997";
try {
Date date1 = myFormat.parse(inputString1);
Date date2 = myFormat.parse(inputString2);
long diff = date2.getTime() - date1.getTime();
System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));
} catch (ParseException e) {
e.printStackTrace();
}
但是,当日期属于夏令时区时,我遇到了问题。喜欢EDT到EST。例如,当我们计算(2017年3月1日)至2017年3月30日之间的天数时,实际计数应为29,但上述计划的结果为28。
答案 0 :(得分:2)
您可以使用LocalDate
:
System.out.println(
Period.between(
LocalDate.parse("2017-03-01"),
LocalDate.parse("2017-03-30")
).getDays()
); // 29
或使用dd M yyyy
格式:
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd M yyyy");
LocalDate localDate = LocalDate.parse("01 03 2017",dateTimeFormatter);
LocalDate localDate1 = LocalDate.parse("30 03 2017",dateTimeFormatter);
System.out.println(Period.between(localDate,localDate1).getDays());
答案 1 :(得分:0)
使用java 8 new Date Time APi
import java.time.*;
import java.time.temporal.*;
ZonedDateTime z1 = date1.toInstant().atZone(ZoneId.systemDefault());
ZonedDateTime z2 = date2.toInstant().atZone(ZoneId.systemDefault());
long diff = ChronoUnit.DAYS.between(z1, z2); // 29
答案 2 :(得分:-1)
您可能需要的是在对其进行差异之前将日期转换为相同的时区。时区代码看起来应该是这样的 -
myFormat.setTimeZone(TimeZone.getTimeZone( “EST”));