Nit*_*ani 1 java date dayofweek week-number localdate
我想检索前一年的同一天。
例如,今天是2019-03-302019 年,第 26 周(一年中的一周),第 7 天(一周中的某天)。
我需要构造LocalDate哪个是 2018 年,第 26 周(一年中的一周),第 7 天(一周中的某天)。
我无法从java.time可以LocalDate像这样构建的包中找到。
似乎您希望上一年的日期与给定日期具有相同的年份和星期几。下面的代码给你那个结果。
LocalDate currentLocalDate = LocalDate.now();
int dayOfWeek = currentLocalDate.getDayOfWeek().getValue();
int weekOfYear = currentLocalDate.get(ChronoField.ALIGNED_WEEK_OF_YEAR);
LocalDate resultLocalDate = currentLocalDate
    .minusYears(1)
    .with(ChronoField.ALIGNED_WEEK_OF_YEAR, weekOfYear)
    .with(ChronoField.DAY_OF_WEEK, dayOfWeek);
完整示例(实时复制):
import java.time.*;
import java.time.format.*;
import java.time.temporal.*;
class Example
{
    private static void showDateInfo(LocalDate ld) {
        int weekOfYear = ld.get(ChronoField.ALIGNED_WEEK_OF_YEAR);
        int dayOfWeek = ld.getDayOfWeek().getValue();
        System.out.println(ld.format(DateTimeFormatter.ISO_LOCAL_DATE) + " is week " + weekOfYear + ", day " + dayOfWeek);
    }
    public static void main (String[] args) throws java.lang.Exception
    {
        LocalDate currentLocalDate = LocalDate.of(2019, 6, 30);
        showDateInfo(currentLocalDate);
        int dayOfWeek = currentLocalDate.getDayOfWeek().getValue();
        int weekOfYear = currentLocalDate.get(ChronoField.ALIGNED_WEEK_OF_YEAR);
        LocalDate resultLocalDate = currentLocalDate
            .minusYears(1)
            .with(ChronoField.ALIGNED_WEEK_OF_YEAR, weekOfYear)
            .with(ChronoField.DAY_OF_WEEK, dayOfWeek);
        showDateInfo(resultLocalDate);
    }
}
输出:
2019-06-30 是第 26 周,第 7 天 2018-07-01 是第 26 周,第 7 天