我有两个这样的日期:
DateTime startingDate = new DateTime(STARTING_YEAR, STARTING_MONTH, STARTING_DAY, 0, 0);
DateTime endingDate = new DateTime(ENDING_YEAR, ENDING_MONTH, ENDING_DAY, 0, 0);
TOTAL_DAYS = Days.daysBetween(startingDate, endingDate).getDays();
很容易知道它们之间的总天数,但我对API并不熟悉,并且想知道是否有更简单的方法来查找2个日期之间每个月没有循环的天数和IFS。
示例:
DateTime startingDate = new DateTime(2000, 1, 1, 0, 0);
DateTime endingDate = new DateTime(2000, 2, 3, 0, 0);
1月31日,2月2日。
谢谢!
答案 0 :(得分:0)
我最后用循环做了。
DateTime startingDate = new DateTime(STARTING_YEAR, STARTING_MONTH, STARTING_DAY, 0, 0);
DateTime endingDate = new DateTime(ENDING_YEAR, ENDING_MONTH, ENDING_DAY, 0, 0);
TOTAL_DAYS = Days.daysBetween(startingDate, endingDate).getDays();
DateTime currentDate = startingDate;
System.out.println(currentDate.dayOfMonth().getMaximumValue() - currentDate.dayOfMonth().get() + 1);
currentDate = currentDate.plus(Period.months(1));
while (currentDate.isBefore(endingDate)) {
System.out.println(currentDate.dayOfMonth().getMaximumValue());
currentDate = currentDate.plus(Period.months(1));
}
System.out.println(endingDate.dayOfMonth().get());
答案 1 :(得分:0)
double days =(endingDate.getMillis() - startingDate.getMillis())/ 86400000.0;
将天数作为浮点数。如果您只想要整天的数量,请截断。
答案 2 :(得分:0)
这可能有所帮助:
DateTime startingDate = new DateTime(2000, 1, 1, 0, 0);
DateTime endingDate = new DateTime(2000, 2, 3, 0, 0);
Duration duration = new Duration(startingDate, endingDate);
System.out.println(duration.getStandardDays());//get the difference in number of days
答案 3 :(得分:0)
仅供参考,Joda-Time项目现在位于maintenance mode,建议迁移到java.time。
如果您想单独处理每个中间月份,则需要进行迭代。但YearMonth
课程略微简化了这项工作。此外,您可以使用Streams屏蔽迭代。
java.time类明智地使用半开放方法来定义时间跨度。这意味着开头是包含,而结尾是独占。因此,一个月的范围需要以跟随结束目标月份结束。
TemporalAdjuster
TemporalAdjuster
接口提供了对日期时间值的操作。 TemporalAdjusters
类(注意复数s
)提供了几个方便的实现。我们需要:
LocalDate
LocalDate
类表示没有时间且没有时区的仅限日期的值。
LocalDate startDate = LocalDate.of( 2000 , 1 , 1 );
YearMonth ymStart = YearMonth.from( startDate );
LocalDate stopDate = LocalDate.of( 2000 , 2 , 3 );
LocalDate stopDateNextMonth = stopDate.with( TemporalAdjusters.firstDayOfNextMonth() );
YearMonth ymStop = YearMonth.from( stopDateNextMonth );
每月循环。
顺便说一下,您可以通过Month
枚举对象询问本月的本地化名称。
YearMonth ym = ymStart;
do {
int daysInMonth = ym.lengthOfMonth ();
String monthName = ym.getMonth ().getDisplayName ( TextStyle.FULL , Locale.CANADA_FRENCH );
System.out.println ( ym + " : " + daysInMonth + " jours en " + monthName );
// Prepare for next loop.
ym = ym.plusMonths ( 1 );
} while ( ym.isBefore ( ymStop ) );
2000-01:31 jours en janvier
2000-02:29 joursenfévrier
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,.Calendar
和& java.text.SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。