Cómo comprobar si es sábado/domingo?

Lo que este código hace es imprimir las fechas de la actual semana de lunes a viernes. Funciona bien, pero quiero preguntar algo más: Si hoy es sábado o domingo a las que quiero mostrar de la siguiente semana. ¿Cómo puedo hacer eso?

Aquí está mi código de trabajo hasta el momento (gracias a StackOverflow!!):

//Get calendar set to current date and time
Calendar c = Calendar.getInstance();

//Set the calendar to monday of the current week
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

//Print dates of the current week starting on Monday to Friday
DateFormat df = new SimpleDateFormat("EEE dd/MM/yyyy");
for (int i = 0; i <= 4; i++) {
    System.out.println(df.format(c.getTime()));
    c.add(Calendar.DATE, 1);
}

Muchas gracias! Realmente lo aprecio como he estado buscando la solución por horas…

InformationsquelleAutor Cristian | 2011-01-09

2 Kommentare

  1. 25
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        //Set the calendar to monday of the current week
        c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    
        //Print dates of the current week starting on Monday to Friday
        DateFormat df = new SimpleDateFormat("EEE dd/MM/yyyy");
        for (int i = 0; i <= 10; i++) {
            System.out.println(df.format(c.getTime()));
            int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
            if (dayOfWeek == Calendar.FRIDAY) { //If it's Friday so skip to Monday
                c.add(Calendar.DATE, 3);
            } else if (dayOfWeek == Calendar.SATURDAY) { //If it's Saturday skip to Monday
                c.add(Calendar.DATE, 2);
            } else {
                c.add(Calendar.DATE, 1);
            }
    
            //As Cute as a ZuZu pet.
            //c.add(Calendar.DATE, dayOfWeek > Calendar.THURSDAY ? (9 - dayOfWeek) : 1);
        }
    }

    Salida

    Mon 03/01/2011
    Tue 04/01/2011
    Wed 05/01/2011
    Thu 06/01/2011
    Fri 07/01/2011
    Mon 10/01/2011
    Tue 11/01/2011
    Wed 12/01/2011
    Thu 13/01/2011
    Fri 14/01/2011
    Mon 17/01/2011

    Si quieres ser lindo puede reemplazar el if/then/else con

    c.add(Calendar.DATE, dayOfWeek > 5 ? (9 - dayOfWeek) : 1);

    pero yo realmente quería algo fácilmente comprensible y legible.

    • gracias por la respuesta! Si lo ejecuto dice que el día de la semana es de 2 (es domingo de aquí). Así que me he puesto en el que para y el lunes empezar con 3…. es eso correcto ?
    • MUCHAS GRACIAS HOMBRE!!!!!!!
    • Tal vez de usar ‘dayOfWeek == Calendario.VIERNES’ preferencia ‘dayOfWeek == 6’, etc.?
    • Lo siento por la otra respuesta, pero tengo que decir que es absolutamente rock… Este ha sido molesto conmigo no hay final, ya que soy un principiante en Java en la universidad! Tiene un año impresionante!
    • estás en lo correcto, él no debería estar usando el Calendario.VIERNES en su lugar. Eso es lo que me pasa por escribir rápido código. Se los agradezco. +1 para ti.
  2. 17

    tl;dr

    Núcleo de código concepto:

    EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY )           //Instantiate a n implementation of `Set` highly optimized in both memory usage and execution speed for collecting enum objects. 
           .contains(                                             //Ask if our target `DayOfWeek` enum object is in our `Set`. 
                LocalDate.now( ZoneId.of( "America/Montreal" ) )  //Determine today’s date as seen by the people of a particular region (time zone).
                         .getDayOfWeek()                          //Determine the `DayOfWeek` enum constant representing the day-of-week of this date.
            )

    java.tiempo

    La manera moderna es con el java.clases de tiempo.

    La DayOfWeek enum proporciona siete objetos, de lunes a domingo.

    La LocalDate clase representa una fecha valor solo sin la hora del día y sin zona horaria.

    Una zona de tiempo es crucial en la determinación de una fecha. Para un momento dado, la fecha varía en todo el mundo por la zona. Por ejemplo, un par de minutos después de la medianoche en París, Francia es un nuevo día, mientras todavía «ayer» en Montréal Québec.

    ZoneId z = ZoneId.of( "America/Montreal" );
    LocalDate today = LocalDate.now( z );
    DayOfWeek dow = today.getDayOfWeek();

    Definir el fin de semana como un conjunto de DayOfWeek objetos. Tenga en cuenta que EnumSet es especialmente rápido y de memoria baja implementación de Set diseñado para mantener Enum objetos tales como DayOfWeek.

    Set<DayOfWeek> weekend = EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY );

    Ahora podemos probar si hoy es un día de semana o un fin de semana.

    Boolean todayIsWeekend = weekend.contains( dow );

    La Pregunta dijo que quiere saltar al comienzo de la próxima semana si se trata de un fin de semana. Para ello, utiliza un TemporalAdjuster que proporciona para las clases que se pueden manipular fecha y la hora de los objetos. En java.el tiempo que hemos los objetos inmutables. Esto significa que tenemos que producir nuevas instancias en función de los valores dentro de un objeto existente, en lugar de alterar («mutar») de la original. El TemporalAdjusters clase (nótese el plural ‘s’) proporciona varios práctico implementaciones de TemporalAdjuster incluyendo next( DayOfWeek ).

    DayOfWeek firstDayOfWeek = DayOfWeek.MONDAY ;
    LocalDate startOfWeek = null ;
    if( todayIsWeekend ) {
        startOfWeek = today.with( TemporalAdjusters.next( firstDayOfWeek ) );
    } else {
        startOfWeek = today.with( TemporalAdjusters.previousOrSame( firstDayOfWeek ) );
    }

    Nos suave-código de la longitud de la semana en caso de que nuestra definición de fin de semana, nunca cambia.

    LocalDate ld = startOfWeek ;
    int countDaysToPrint = ( DayOfWeek.values().length - weekend.size() );
    for( int i = 1 ; i <= countDaysToPrint ; i++ ) {
        System.out.println( ld );
        //Set up the next loop.
        ld = ld.plusDays( 1 );
    }

    Ver de código en vivo en IdeOne.com.

    Cómo comprobar si es sábado/domingo?


    Acerca de java.tiempo

    La java.tiempo marco está construido en Java 8 y versiones posteriores. Estas clases suplantar la problemática de edad legado fecha y hora de las clases, tales como java.util.Fecha, Calendario, & SimpleDateFormat.

    La Joda-El Tiempo proyecto, ahora en el modo de mantenimiento, asesora de la migración a java.tiempo.

    Para obtener más información, consulte la Oracle Tutorial. Y la búsqueda de Desbordamiento de Pila, hay muchos ejemplos y explicaciones. La especificación es JSR 310.

    Dónde obtener el java.clases de tiempo?

    • Java SE 8 y que SE 9 y más tarde
      • Incorporado.
      • Parte de la norma API de Java con un paquete de implementación.
      • Java 9 añade algunas características menores y correcciones.
    • Java SE 6 y que SE 7
      • Mucho de java.el tiempo es la funcionalidad de back-portado a Java 6 & 7 en ThreeTen-Backport.
    • Android

    La ThreeTen-Extra proyecto se extiende java.tiempo con clases adicionales. Este proyecto es un terreno de prueba para posibles futuras incorporaciones a java.tiempo. Usted puede encontrar algunos de clases útiles aquí como Intervalo, YearWeek, YearQuarter, y más.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea