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



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

(月-日-年(

输出应06-09-2012,如此日历所示。

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

tl;dr

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类。

首先将输入字符串解析为LocalDate

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

ld.to字符串((: 2012-06-04

然后获取下一个星期六,或者如果是星期六,则使用日期本身。要指定星期六,请使用枚举DayOfWeek.SATURDAY 。若要查找下一个或同一日期即星期六,请使用在 TemporalAdjusters(注意复数名称(类中找到的TemporaAdjuster的实现。

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

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

String output = ld.toString();

2012年06月09

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

String output = ld.format( f );

2012-09-06


关于 java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧传统日期时间类,如java.util.DateCalendarSimpleDateFormat

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

要了解更多信息,请参阅 Oracle 教程。并搜索堆栈溢出以获取许多示例和解释。规范为 JSR 310。

从哪里获得java.time类?

  • Java SE 8SE 9 及更高版本
    • 内置。
    • 具有捆绑实现的标准 Java API 的一部分。
    • Java 9添加了一些小功能和修复。
  • Java SE 6SE 7
    • 许多java.time功能在ThreeTen-Backport中向后移植到Java 6和7。
  • 人造人
    • ThreeTenABP项目专门为Android改编了ThreeTen-Backport(如上所述(。
    • 请参阅如何使用ThreeTenABP...

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

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

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

最新更新