ven*_*bhi 18 java datetime date
在今天的日期,我应该得到上个月的第一个日期和最后日期.我无法想出任何逻辑.
例如,在通过时05/30/2012,我应该得到04/01/2012和04/30/2012.
任何帮助都感激不尽.谢谢.
Jig*_*shi 32
同 Calendar
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();
Run Code Online (Sandbox Code Playgroud)
看到
YearMonth.now().minusMonths( 1 ).atDay( 1 )
Run Code Online (Sandbox Code Playgroud)
…和…
YearMonth.now().minusMonths( 1 ).atEndOfMonth()
Run Code Online (Sandbox Code Playgroud)
避免使用捆绑的java.util.Date和.Calendar类,因为它们非常麻烦.而是在Java 8及更高版本中使用java.time包.
Java 8(教程)中的新java.time框架具有此命令.
名称恰当的YearMonth课程代表一年中的一个月,没有任何特定的日期或时间.从那里我们可以要求本月的第一天和最后一天.
ZonedId zoneId = ZoneId.of( "America/Montreal" );
YearMonth yearMonthNow = YearMonth.now( zoneId );
YearMonth yearMonthPrevious = yearMonthNow.minusMonths( 1 );
LocalDate firstOfMonth = yearMonthPrevious.atDay( 1 );
LocalDate lastOfMonth = yearMonthPrevious.atEndOfMonth();
Run Code Online (Sandbox Code Playgroud)
UPDATE:该乔达时间的项目现在处于维护模式,与团队的建议迁移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 );
Run Code Online (Sandbox Code Playgroud)
该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-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.
使用乔达时间
DateMidnight now = new DateMidnight();
DateMidnight beginningOfLastMonth = now.minusMonths(1).withDayOfMonth(1);
DateMidnight endOfLastMonth = now.withDayOfMonth(1).minusDays(1);
System.out.println(beginningOfLastMonth);
System.out.println(endOfLastMonth);
Run Code Online (Sandbox Code Playgroud)
输出:
2012-04-01T00:00:00.000+02:00
2012-04-30T00:00:00.000+02:00
说明: DateMidnight 对象是没有时间信息的日期对象,这似乎正是您所需要的。如果没有,请将上述代码中出现的所有 DateMidnight 替换为 DateTime。