向@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类。
LocalDateLocalDate类表示没有日期和时区的仅日期值。
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类?
  • Java SE 8Java SE 9和更高版本
  • 内置。
  • 是标准Java API的一部分,具有捆绑的实现。
  • Java 9添加了一些次要功能和修复。
  • Java SE 6Java SE 7
  • 许多java.time功能都已在ThreeTen-Backport中反向移植到Java 6和7。
  • Android
  • ThreeTenABP项目专门为Android改编了ThreeTen-Backport(如上所述)。
  • 请参阅How to use ThreeTenABP…

  • ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如 Interval YearWeek YearQuarter more

    10-04 20:59
    查看更多