向@Basil Bourque查看最新答案
例如,如果我有一个“日期”变量“date1”,其值为(dd/mm/yyy)03/07/2011,即星期日。如何获得上一个星期日“date2”的“日期”?其值为(dd/mm/yyyy)26/06/2011。
有没有简单的方法可以做到这一点,例如:
伪代码:
Date date1 = (03/07/2011);
Date date2 = date1.subtractNumberOfDays(7);
最佳答案
tl; dr
LocalDate.of( 2011 , Month.JULY , 3 )
.minusWeeks( 1 )
java.time
问与答使用旧的过时的日期时间类。而是使用java.time类。
LocalDate
LocalDate
类表示没有日期和时区的仅日期值。LocalDate localDate = LocalDate.of( 2011 , Month.JULY , 3 );
或者,在第二个参数中传递一个整数,而不是
Month
枚举。 1月至12月通过1-12。上个礼拜
您可以从日期中减去一周。
LocalDate weekPrior = localDate.minusWeeks( 1 );
看到这个code run live at IdeOne.com。
前一周的一天
如果要在一周中的特定日期使用
TemporalAdjuster
。TemporalAdjusters
类中提供了几个此类方便的实现(请注意复数“s”)。LocalDate priorTuesday = localDate.with( TemporalAdjusters.previous( DayOfWeek.TUESDAY ) ) ;
关于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。