java 日期和 LocalDateTime 中一个月的天数

Number of Days in a Month in java Date and LocalDateTime

对于 startDate 和 endDate 如下,我如何确定以月和日为单位的时间段(剩下的部分):

String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
SimpleDateFormat format = new SimpleDateFormat(pattern);
Date start = format.parse("2016-11-09T02:00:00.000Z");
Date end = format.parse("2017-09-30T09:00:00.000Z");

结果我想要:10 个月零 22 天(结束日期在)

如果可以用Java 8,不如用LocalDateTimePeriod:

ZonedDateTime dateTime = ZonedDateTime.parse("2016-11-09T02:00:00.000Z");
ZonedDateTime end = ZonedDateTime.parse("2017-09-30T09:00:00.000Z");
System.out.println(Period.between(dateTime.toLocalDate(),end.toLocalDate())); 

结果是P10M21D10个月零21天

此代码应该适合您。这是使用 JODA Time 完成的。因为你也用 jodatime 标记了这个问题,所以我相信你的项目中将包含 jodatime 所需的包。

String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
SimpleDateFormat format = new SimpleDateFormat(pattern);
Date start = format.parse("2016-11-09T02:00:00.000Z");
Date end = format.parse("2017-09-30T09:00:00.000Z");

LocalDate a = LocalDate.fromDateFields(start);
LocalDate b = LocalDate.fromDateFields(end);
Period p = new Period(a, b);
System.out.println("Months:  "+((p.getYears() * 12) + p.getMonths()));
System.out.println("Days: "+(p.getWeeks()*7+ p.getDays()));

但是,如果您使用的是 Java 8.0 或更高版本,您可以坚持使用@Anton 建议的解决方案。