如果我有一天的具体日期,我如何获得前一周的那一天的日期?

Ian*_*Ian 12 java datetime calendar date

从@Basil Bourque那里获得最新答案的答案


例如,如果我有一个"日期"变量"date1",其值为(dd/mm/yyy)03/07/2011,这是一个星期日.如何获得上一个星期日"date2"的"日期"?这将是值(年/月/日)26/06/2011.

有没有一种简单的方法,例如:

伪代码:

Date date1 = (03/07/2011);
Date date2 = date1.subtractNumberOfDays(7);
Run Code Online (Sandbox Code Playgroud)

Pet*_*nov 34

您应该使用日历:

    Calendar date = new GregorianCalendar(2011, Calendar.JULY, 3);
    date.add(Calendar.DAY_OF_MONTH, -7);
    System.out.println(date.getTime());
Run Code Online (Sandbox Code Playgroud)

您也可以从日期创建日历:

    Date date1 = new Date(111, Calendar.JULY, 3);//the year field adds 1900 on to it.
    Calendar date = new GregorianCalendar();
    date.setTime(date1);
    date.add(Calendar.DAY_OF_MONTH, -7);
    date2 = date.getTime();
Run Code Online (Sandbox Code Playgroud)

意识到:

  • Java使用0代表1月!
  • 自JDK 1.1版以来,不推荐使用日期(年,月,日)!

请参阅GregorianCalendar JavaDoc:

使用默认区域设置在默认时区中设置给定日期的GregorianCalendar构造.参数:year用于在日历中设置YEAR日历字段的值.month用于在日历中设置MONTH日历字段的值.月值基于0.例如,1月份为0.dayOfMonth用于在日历中设置DAY_OF_MONTH日历字段的值.

  • 不推荐使用创建日期"新日期(2011,3,7)"的第二种方法. (2认同)

Bas*_*que 9

TL;博士

LocalDate.of( 2011 , Month.JULY , 3 )
         .minusWeeks( 1 ) 
Run Code Online (Sandbox Code Playgroud)

2011-06-26

java.time

问题和答案使用旧的过时的日期时间类.而是使用java.time类.

LocalDate

LocalDate级表示没有时间一天和不同时区的日期,唯一的价值.

LocalDate localDate = LocalDate.of( 2011 , Month.JULY , 3 ); 
Run Code Online (Sandbox Code Playgroud)

或者,在第二个参数中传递一个整数而不是Month枚举.1月至12月通过1-12.

上个礼拜

您可以从日期中减去一周.

LocalDate weekPrior = localDate.minusWeeks( 1 );
Run Code Online (Sandbox Code Playgroud)

请参阅IdeOne.com上的代码.

前几天

如果您想要一周中的特定日期,请使用TemporalAdjuster.

TemporalAdjusters类中提供了几个这样的方便实现(注意复数's').

LocalDate priorTuesday = localDate.with( TemporalAdjusters.previous( DayOfWeek.TUESDAY ) ) ;
Run Code Online (Sandbox Code Playgroud)

关于java.time

java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.

现在处于维护模式Joda-Time项目建议迁移到java.time类.

要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.

从哪里获取java.time类?

ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.