如何使用JodaTime获取一年中的天数?

时间:2012-02-14 18:46:29

标签: java jodatime

我尝试过以下无效:

new Period(Years.ONE).getDays();

new Period(1, 0, 0, 000).getDays();

我想要的答案显然是365。

4 个答案:

答案 0 :(得分:12)

您想要的答案显然不是365。它是365366,您不会在示例中考虑闰年。

检测闰年并且只是用三元语句对其进行硬编码是不可接受的?

final DateTime dt = new DateTime();
final int daysInYear = dt.year().isLeap() ? 366 : 365;

当然,这将为您提供当年的天数,如何获得不同年份的天数是微不足道的,并为读者练习。

答案 1 :(得分:9)

如果您想要某一年的实际天数:

int year = 2012;
LocalDate ld = new LocalDate(year,1,1);
System.out.println(Days.daysBetween(ld,ld.plusYears(1)).getDays());

当然,这会返回365或366 ...通常:

int year = 1582;
LocalDate ld = new LocalDate(year,1,1,GJChronology.getInstance());
System.out.println(Days.daysBetween(ld,ld.plusYears(1)).getDays());
// year 1582 had 355 days

答案 2 :(得分:3)

TL;博士

java.time.Year.of( 2017 ).length()

使用java.time

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

java.time.Year课程可代表任何特定年份。

Year year = Year.of( 2017 );

您可以询问有关该年份的信息,例如其天数的长度或是否为Leap Year

int countDaysInYear = year.length() ;
boolean isLeapYear = year.isLeap() ; // ISO proleptic calendar system rules.

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 3 :(得分:2)

new DateTime()。year()。toInterval()。toDuration()。getStandardDays();