如何获得上个月的第一个日期和最后一个日期?(爪哇)tl;博士避免 j.u.Datejava.time城大时间关于 java.time
有了今天的日期,我应该得到上个月的第一个日期和最后一个日期。我无法想出任何逻辑。
例如,在传递时,我应该得到 和 。05/30/2012
04/01/2012
04/30/2012
任何帮助将不胜感激。谢谢。
有了今天的日期,我应该得到上个月的第一个日期和最后一个日期。我无法想出任何逻辑。
例如,在传递时,我应该得到 和 。05/30/2012
04/01/2012
04/30/2012
任何帮助将不胜感激。谢谢。
使用日历
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
cal.set(Calendar.DATE, 1);
Date firstDateOfPreviousMonth = cal.getTime();
cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE)); // changed calendar to cal
Date lastDateOfPreviousMonth = cal.getTime();
看
YearMonth.now().minusMonths( 1 ).atDay( 1 )
...和。。。
YearMonth.now().minusMonths( 1 ).atEndOfMonth()
避免捆绑和类,因为它们是出了名的麻烦。相反,请在 Java 8 及更高版本中使用 java.time 包。java.util.Date
.Calendar
Java 8(教程)中的新java.time框架具有用于此的命令。
恰如其分的 YearMonth
类表示一年中的一个月,没有任何特定的日期或时间。从那里我们可以要求每月的第一天和最后几天。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
YearMonth yearMonthNow = YearMonth.now( zoneId );
YearMonth yearMonthPrevious = yearMonthNow.minusMonths( 1 );
LocalDate firstOfMonth = yearMonthPrevious.atDay( 1 );
LocalDate lastOfMonth = yearMonthPrevious.atEndOfMonth();
更新:Joda-Time项目现在处于维护模式,团队建议迁移到java.time类。请参阅 Oracle 的教程。
在Joda-Time 2.8中,如果您不关心一天中的时间,请使用该类。LocalDate
LocalDate today = LocalDate.now( DateTimeZone.forID( "Europe/Paris" ) );
LocalDate firstOfThisMonth = today.withDayOfMonth( 1 );
LocalDate firstOfLastMonth = firstOfThisMonth.minusMonths( 1 );
LocalDate endOfLastMonth = firstOfThisMonth.minusDays( 1 );
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧旧日期时间类,如java.util.Date
,Calendar
和SimpleDateFormat
。
Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。
要了解更多信息,请参阅 Oracle 教程。搜索 Stack Overflow 以获取许多示例和解释。规格是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合 JDBC 4.2 或更高版本的 JDBC 驱动程序。不需要字符串,不需要类。java.sql.*
从哪里获取 java.time 类?
ThreeTen-Extra 项目通过其他类扩展了 java.time。这个项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
等。