Saltar al contenido

Obtener la fecha de inicio y finalización de la semana actual en Java – (DE LUNES A DOMINGO)

Posterior a observar en diferentes repositorios y páginas webs de internet al concluir nos encontramos con la resolución que te mostraremos más adelante.

Solución:

Respuesta actualizada usando Java 8

Utilizando Java 8 y manteniendo el mismo principio que antes (el primer día de la semana depende de su Locale), debería considerar utilizar lo siguiente:

Obtén el primero y el último DayOfWeek para un específico Locale

final DayOfWeek firstDayOfWeek = WeekFields.of(locale).getFirstDayOfWeek();
final DayOfWeek lastDayOfWeek = DayOfWeek.of(((firstDayOfWeek.getValue() + 5) % DayOfWeek.values().length) + 1);

Consulta para el primer y último día de esta semana

LocalDate.now(/* tz */).with(TemporalAdjusters.previousOrSame(firstDayOfWeek)); // first day
LocalDate.now(/* tz */).with(TemporalAdjusters.nextOrSame(lastDayOfWeek));      // last day

Demostración

Considera lo siguiente class:

private static class ThisLocalizedWeek 

    // Try and always specify the time zone you're working with
    private final static ZoneId TZ = ZoneId.of("Pacific/Auckland");

    private final Locale locale;
    private final DayOfWeek firstDayOfWeek;
    private final DayOfWeek lastDayOfWeek;

    public ThisLocalizedWeek(final Locale locale) 
        this.locale = locale;
        this.firstDayOfWeek = WeekFields.of(locale).getFirstDayOfWeek();
        this.lastDayOfWeek = DayOfWeek.of(((this.firstDayOfWeek.getValue() + 5) % DayOfWeek.values().length) + 1);
    

    public LocalDate getFirstDay() 
        return LocalDate.now(TZ).with(TemporalAdjusters.previousOrSame(this.firstDayOfWeek));
    

    public LocalDate getLastDay() 
        return LocalDate.now(TZ).with(TemporalAdjusters.nextOrSame(this.lastDayOfWeek));
    

    @Override
    public String toString() 
        return String.format(   "The %s week starts on %s and ends on %s",
                                this.locale.getDisplayName(),
                                this.firstDayOfWeek,
                                this.lastDayOfWeek);
    

Podemos demostrar su uso de la siguiente manera:

final ThisLocalizedWeek usWeek = new ThisLocalizedWeek(Locale.US);
System.out.println(usWeek);
// The English (United States) week starts on SUNDAY and ends on SATURDAY
System.out.println(usWeek.getFirstDay()); // 2018-01-14
System.out.println(usWeek.getLastDay());  // 2018-01-20

final ThisLocalizedWeek frenchWeek = new ThisLocalizedWeek(Locale.FRANCE);
System.out.println(frenchWeek);
// The French (France) week starts on MONDAY and ends on SUNDAY
System.out.println(frenchWeek.getFirstDay()); // 2018-01-15
System.out.println(frenchWeek.getLastDay());  // 2018-01-21

Respuesta original de Java 7 (desactualizado)

Simplemente use:

c.setFirstDayOfWeek(Calendar.MONDAY);

Explicación:

Ahora mismo, tu primer dia de la semana está configurado en Calendar.SUNDAY. Esta es una configuración que depende de su Locale.

Por lo tanto, un mejor alternativa sería inicializar su Calendar especificando el Locale te interesa.
Por ejemplo:

Calendar c = GregorianCalendar.getInstance(Locale.US);

… te daría tu Actual salida, mientras que:

Calendar c = GregorianCalendar.getInstance(Locale.FRANCE);

… te daría tu esperado producción.

Bueno, parece que obtuviste tu respuesta. Aquí hay un complemento que usa java.time en Java 8 y versiones posteriores. (Ver tutorial)

import java.time.DayOfWeek;
import java.time.LocalDate;

public class MondaySunday

  public static void main(String[] args)
  
    LocalDate today = LocalDate.now();

    // Go backward to get Monday
    LocalDate monday = today;
    while (monday.getDayOfWeek() != DayOfWeek.MONDAY)
    
      monday = monday.minusDays(1);
    

    // Go forward to get Sunday
    LocalDate sunday = today;
    while (sunday.getDayOfWeek() != DayOfWeek.SUNDAY)
    
      sunday = sunday.plusDays(1);
    

    System.out.println("Today: " + today);
    System.out.println("Monday of the Week: " + monday);
    System.out.println("Sunday of the Week: " + sunday);
  

Otra forma de hacerlo, utilizando ajustadores temporales.

import java.time.LocalDate;

import static java.time.DayOfWeek.MONDAY;
import static java.time.DayOfWeek.SUNDAY;
import static java.time.temporal.TemporalAdjusters.nextOrSame;
import static java.time.temporal.TemporalAdjusters.previousOrSame;

public class MondaySunday

  public static void main(String[] args)
  
    LocalDate today = LocalDate.now();

    LocalDate monday = today.with(previousOrSame(MONDAY));
    LocalDate sunday = today.with(nextOrSame(SUNDAY));

    System.out.println("Today: " + today);
    System.out.println("Monday of the Week: " + monday);
    System.out.println("Sunday of the Week: " + sunday);
  

Esto es lo que hice para obtener la fecha de inicio y finalización de la semana actual.

public static Date getWeekStartDate() 
    Calendar calendar = Calendar.getInstance();
    while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) 
        calendar.add(Calendar.DATE, -1);
    
    return calendar.getTime();


public static Date getWeekEndDate() 
    Calendar calendar = Calendar.getInstance();
    while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) 
        calendar.add(Calendar.DATE, 1);
    
    calendar.add(Calendar.DATE, -1);
    return calendar.getTime();

Recuerda que tienes el privilegio agregar una reseña si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *