使用 java.time
现代方法是使用 java.time 类来代替麻烦的旧旧日期时间类。
java.time 类更容易使用。特别是,它们消除了问题中提出的歧义。您可以明确要求较早星期日或较晚星期日。
LocalDate 类表示没有时间和时区的仅日期值。
Month 枚举提供了十几个预定义对象,一年中的每个月一个。这些枚举对象使用起来更安全,但您可以改为使用纯数字来表示月份。与传统课程不同,这些月份的编号很合理,1 月至 12 月为 1-12。
LocalDate localDate = LocalDate.of( 2009 , Month.AUGUST, 22 );
TemporalAdjuster 接口提供日期时间值的操作。 TemporalAdjusters 类(注意复数 s)提供了几个方便的实现。
previous 和next 调整器不考虑日期本身。 previousOrSame 和 nextOrSame 方法返回有问题的日期,如果它确实是所需的星期几。
DayOfWeek 枚举提供了七个预定义对象,一个用于一周中的每一天。
LocalDate previousSunday = localDate.with( TemporalAdjusters.previous ( DayOfWeek.SUNDAY ));
LocalDate previousOrSameSunday = localDate.with( TemporalAdjusters.previousOrSame ( DayOfWeek.SUNDAY ));
LocalDate nextSunday = localDate.with( TemporalAdjusters.next ( DayOfWeek.SUNDAY ));
LocalDate nextOrSameSunday = localDate.with( TemporalAdjusters.nextOrSame ( DayOfWeek.SUNDAY ));
转储到控制台。
System.out.println ("localDate: " + localDate + " ( " + localDate.getDayOfWeek ().getDisplayName ( TextStyle.FULL, Locale.US ) + " )");
System.out.println ("previousSunday: " + previousSunday );
System.out.println ("nextSunday: " + nextSunday );
本地日期:2009-08-22(星期六)
上一个星期日:2009-08-16
下周日:2009-08-23
关于java.time
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。