获取给定日期的周的最后一天(日期)

时间:2012-05-23 05:56:33

标签: java datetime

如何获取特定日期的最后一周日(星期六)日期。表示我将输入设为06-04-2012

  

(MM-DD-YYYY)

输出应为06-09-2012,如this calendar中所示。

4 个答案:

答案 0 :(得分:7)

Calendar cal  = Calendar.getInstance();
int currentDay = cal.get(Calendar.DAY_OF_WEEK);
int leftDays= Calendar.SATURDAY - currentDay;
cal.add(Calendar.DATE, leftDays);

答案 1 :(得分:2)

TL;博士

LocalDate.parse( 
    "06-04-2012" , 
    DateTimeFormatter.ofPattern( "MM-dd-uuuu" ) 
).with( TemporalAdjusters.nextOrSame( DayOfWeek.SATURDAY ) )
 .format( DateTimeFormatter.ofPattern( "MM-dd-uuuu" )  )

使用java.time

现代的方法是使用java.time类。

首先parse您的输入字符串为LocalDate

DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" );
LocalDate ld = LocalDate.parse( "06-04-2012" , f );
  

ld.toString():2012-06-04

然后到下周六,或者如果是星期六那么使用日期。要指定星期六,请使用枚举DayOfWeek.SATURDAY。要查找星期六的下一个或相同日期,请使用TemporaAdjuster(注释复数名称)类中的TemporalAdjusters实现。

LocalDate nextOrSameSaturday = 
    ld.with( TemporalAdjusters.nextOrSame( DayOfWeek.SATURDAY ) ) ;

要生成字符串,我建议调用toString以使用标准ISO 8601格式。

String output = ld.toString();
  

2012-06-09

但是如果你坚持,你可以使用与解析时相同的格式化程序。

String output = ld.format( f );
  

06-09-2012

关于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 :(得分:0)

查看JODA时间或(如果无法添加新库)Calendar类。

答案 3 :(得分:0)

public Calendar lastDayOfWeek(Calendar calendar){  
     Calendar cal = (Calendar) calendar.clone();  
     int day = cal.get(Calendar.DAY_OF_YEAR);  
     while(cal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY){  
          cal.set(Calendar.DAY_OF_YEAR, ++day);  
     }  
     return cal;  
}