如何动态获取会计年度结束日期(2017-09-30)。 基于这一年,我需要动态地获得会计年度结束日期。
例如:
如果2017年那么输出应该是2017-09-30 如果2018那么输出应该是2018-09-30,依此类推。
代码:
Calendar.getInstance().getActualMaximum(Calendar.SEPTEMBER);
输出我得到“4”
我是否可以知道如何动态获取结束日期。
答案 0 :(得分:0)
这会对你有所帮助
private static String getDate(int month, int year) {
Calendar calendar = Calendar.getInstance();
// passing month-1 because 0-->jan, 1-->feb... 11-->dec
calendar.set(year, month - 1, 1);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
Date date = calendar.getTime();
DateFormat DATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy");
return DATE_FORMAT.format(date);
}
答案 1 :(得分:0)
此处未定义“会计年度”一词。通常这是公司特定的定义,可能不像“9月底”那么简单。
如果您要求同一个月和同一天,但按年份调整,请使用java.time类。麻烦的Calendar
课程现已成为遗产,应该避免。
LocalDate
& MonthDay
LocalDate
类表示没有时间且没有时区的仅限日期的值。
MonthDay
类代表一个月和一个月的日期,没有任何年份,也没有任何时区。
LocalDate ld = LocalDate.of( 2017 , Month.SEPTEMBER , 30 );
MonthDay md = MonthDay.from( ld );
LocalDate ldInAnotherYear = md.atYear( ld.getYear() + 1 );
您还可以简单地添加一年,具体取决于相关日期以及处理一个月的最后几天所需的行为,因为几个月有不同的长度,当然二月还有闰年问题。
LocalDate yearLater = LocalDate.of( 2017 , Month.SEPTEMBER , 30 ).plusYears( 1 );
YearMonth
您可能会发现YearMonth
类很方便。你可以问一下这个月的最后一天。
YearMonth ym = YearMonth( 2017 , Month.SEPTEMBER );
LocalDate endOfMonth = ym.atEndOfMonth();
我建议使用对象而不仅仅是整数。考虑在适当的位置传递YearMonth
,MonthDay
,LocalDate
和Month
等对象,而不是数字。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& 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。