java Date和LocalDateTime中一个月中的天数

时间:2017-09-05 08:44:14

标签: java datetime jodatime

对于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天(结束日期)

2 个答案:

答案 0 :(得分:4)

如果您可以使用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())); 

结果是P10M21D 10个月和21天

答案 1 :(得分:0)

此代码应该可以正常使用。这是使用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建议的解决方案。