获取特定(9月)月的最后一天

时间:2017-02-20 07:46:42

标签: java date

如何动态获取会计年度结束日期(2017-09-30)。 基于这一年,我需要动态地获得会计年度结束日期。

例如:

如果2017年那么输出应该是2017-09-30 如果2018那么输出应该是2018-09-30,依此类推。

代码:

 Calendar.getInstance().getActualMaximum(Calendar.SEPTEMBER);

输出我得到“4”

我是否可以知道如何动态获取结束日期。

2 个答案:

答案 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();

我建议使用对象而不仅仅是整数。考虑在适当的位置传递YearMonthMonthDayLocalDateMonth等对象,而不是数字。

关于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