如何获得当前日期之前的最后一个星期日?java.time.temporal.TemporalAdjuster

2022-09-01 21:41:19

我有以下代码用于获取当前日期之前的最后一个星期日:

Calendar calendar=Calendar.getInstance();
calendar.set(Calendar.WEEK_OF_YEAR, calendar.get(Calendar.WEEK_OF_YEAR)-1);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
Log.e("first day", String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)));

但是此代码不起作用。请告诉我,我该如何解决它?


答案 1

java.time.temporal.TemporalAdjuster

这可以通过在时间调整以及 DayOfWeek 枚举中找到的时间调整实现轻松实现。具体来说,上一个(星期几)星期几。

 LocalDate
 .now()
 .with(
     TemporalAdjusters.previous( DayOfWeek.SUNDAY )
 ) ;

如果今天是星期天,并且您希望结果是今天而不是一周前,请致电exapresorSame(DayOfWeek dayOfWeek)

 LocalDate
 .now()
 .with(
     TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY )
 ) ;

这些类内置于 Java 8 及更高版本中,并内置于 Android 26 及更高版本中。对于Java 6和7,大多数功能都是在ThreeTen-Backport中向后移植的。对于早期的 Android,请参阅 ThreeTenABP


答案 2

这将起作用。我们首先获得日计数,然后用当前日期减去该计数并添加1(星期日)

Calendar cal=Calendar.getInstance();
cal.add( Calendar.DAY_OF_WEEK, -(cal.get(Calendar.DAY_OF_WEEK)-1)); 
System.out.println(cal.get(Calendar.DATE));

编辑:正如Basil Bourque在评论中指出的那样,请参阅Grzegorz Gajos对Java 8及更高版本的答案。


推荐