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



查看@Basil Bourque的答案,了解最新答案


例如,如果我有一个"Date"变量"date1",其值为(dd/mm/yyy)2011年7月3日,即周日。如何获取上周日"日期2"的"日期"?其值为(dd/mm/yyyy)26/06/2011。

有没有一种简单的方法可以做到这一点,例如:

伪代码:

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

您应该使用日历:

    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来表示一月
  • 自JDK 1.1版本以来,日期(年、月、日)已被弃用

参见GregorianCalendar JavaDoc:

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

tl;dr

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

请在IdeOne.com上实时查看此代码。

一周的前一天

如果您想要一周中的某一天,请使用TemporalAdjuster

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

LocalDate priorTuesday = localDate.with( TemporalAdjusters.previous( DayOfWeek.TUESDAY ) ) ;

关于java.time

java.time框架是在java 8及更高版本中构建的。这些类取代了诸如java.util.DateCalendar和&SimpleDateFormat

JodaTime项目现在处于维护模式,建议迁移到java.Time类。

要了解更多信息,请参阅Oracle教程。并在Stack Overflow中搜索许多示例和解释。规范是JSR310。

从哪里获得java.time类?

  • Java SE 8Java SE 9及更高版本
    • 内置
    • 标准Java API的一部分,带有捆绑实现
    • Java 9添加了一些小功能和修复程序
  • Java SE 6Java SE 7
    • 大部分java.time功能都是向后移植到Java6&7英寸ThreeTen背包
  • 安卓
    • ThreeTenABP项目专门为安卓系统改编了ThreeTen Backport(如上所述)
    • 请参阅如何使用ThreeTenABP…

ThreeTen Extra项目通过附加类扩展java.time。这个项目是将来可能添加到java.time的试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter等等。

更清晰的方法:

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

使用WEEK_OF_MONTHWEEK_OF_YEAR

如果你愿意使用Joda时间,这将非常容易。

一个例子:

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

最新更新