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

时间:2011-07-01 09:15:11

标签: java datetime date calendar

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


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

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

伪代码:

Date date1 = (03/07/2011);
Date date2 = date1.subtractNumberOfDays(7);

4 个答案:

答案 0 :(得分:33)

您应该使用日历:

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

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

    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();

请注意:

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

请参阅GregorianCalendar JavaDoc:

  

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

答案 1 :(得分:9)

TL;博士

LocalDate.of( 2011 , Month.JULY , 3 )
         .minusWeeks( 1 ) 
  

2011-06-26

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.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 2 :(得分:4)

更明确的方法:

Calendar date = new GregorianCalendar(2011, 1, 1);
date.add(Calendar.WEEK_OF_MONTH, -1);
System.out.println(date.getTime());

使用WEEK_OF_MONTHWEEK_OF_YEAR

答案 3 :(得分:4)

如果您愿意使用Joda time,那将非常容易。

一个例子:

DateTime toDay=new DateTime();
DateTime dateOfPreviousWeek=toDay.minusDays(7);

另:

DateTime toDay = new DateTime(2011, 7, 1, 0, 0, 0, 0);
DateTime dateOfPreviousWeek = toDay.minusDays(7);

您可以从DateTime获取java.util.Date

Date javaDate=jodaDateTime.toDate();