如何获取特定日期的最后一周日(星期六(日期。表示如果我输入为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.Date
、Calendar
和SimpleDateFormat
。
Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。
要了解更多信息,请参阅 Oracle 教程。并搜索堆栈溢出以获取许多示例和解释。规范为 JSR 310。
从哪里获得java.time类?
- Java SE 8 和 SE 9 及更高版本
- 内置。
- 具有捆绑实现的标准 Java API 的一部分。
- Java 9添加了一些小功能和修复。
- Java SE 6 和 SE 7
- 许多java.time功能在ThreeTen-Backport中向后移植到Java 6和7。
- 人造人
- ThreeTenABP项目专门为Android改编了ThreeTen-Backport(如上所述(。
- 请参阅如何使用ThreeTenABP...。
ThreeTen-Extra项目通过额外的类扩展了java.time。这个项目是未来可能添加到java.time的试验场。你可以在这里找到一些有用的类,如Interval
、YearWeek
、YearQuarter
等。
查看 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;
}