Obtenga la última fecha por día, semana o mes

Recientemente me encontré con un requisito para calcular las estadísticas de datos del período de tiempo reciente por día, semana y mes. Lo escribí
apresuradamente, por lo que el método utilizado y la lógica de escritura serán un poco confusos. Espero que me puedan perdonar. conmigo y grabarlo primero. Si hay más información Los buenos métodos se actualizarán a continuación
1. Obtenga la fecha de cada día de la semana anterior

// 按日统计
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
for (int i = 0; i < 7; i++) {
    
    
    Date date = DateUtils.addDays(new Date(), -i);
    String formatDate = format.format(date);
    System.out.println(formatDate);
}

resultado:
Insertar descripción de la imagen aquí

2. Obtenga las fechas de inicio y finalización de las últimas cuatro semanas.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
LocalDate date = LocalDate.now();
if (date.getDayOfWeek().getValue() == 0){
    
    
    date = date.minus(1, ChronoUnit.DAYS);
}

// 本周一日期
date = date.minus(date.getDayOfWeek().getValue() - 1, ChronoUnit.DAYS);
LocalDate localSunday = date.minus(date.getDayOfWeek().getValue() - 7, ChronoUnit.DAYS);

System.out.println(date + "****" + localSunday);

for (int i = 0; i < 3; i++) {
    
    
    date = date.minus(date.getDayOfWeek().getValue() + 6, ChronoUnit.DAYS);
    LocalDate lastSunday = date.minus(date.getDayOfWeek().getValue() - 7, ChronoUnit.DAYS);

    System.out.println(date + "****" + lastSunday);
}

Resultado:
Insertar descripción de la imagen aquí
3. Obtenga las fechas de inicio y finalización de los últimos seis meses.

// 按月统计
LocalDate date = LocalDate.now();
LocalDate firstDate = date.withDayOfMonth(1);
// 计算本月
LocalDate nextFirstDay = firstDate.minus(-1, ChronoUnit.MONTHS);
System.out.println(firstDate + "****" + nextFirstDay);

for (int i = 0; i < 5; i++) {
    
    
    firstDate = firstDate.minus(1,ChronoUnit.MONTHS);
    LocalDate endDate = firstDate.minus(-1,ChronoUnit.MONTHS);
    System.out.println(firstDate + "****" + endDate);
}

Insertar descripción de la imagen aquí
El último es un poco ridículo... Originalmente quería obtener el último día de este mes, pero luego quería obtener el primer día del segundo mes, finalmente, al buscar por fecha en la base de datos, era directamente más pequeño. que el primer día del segundo mes (2022-12-01 00:00:00) servirá...

Supongo que te gusta

Origin blog.csdn.net/s990420/article/details/128053681
Recomendado
Clasificación