web-dev-qa-db-fra.com

Obtenez le jour de la semaine de GregorianCalendar

J'ai une date et j'ai besoin de connaître le jour de la semaine. J'ai donc utilisé un objet GregorianCalendar, mais je récupère des dates incorrectes.

GregorianCalendar calendar = new GregorianCalendar(year, month, day);
int i = calendar.get(Calendar.DAY_OF_WEEK);

Qu'est-ce que je fais mal? 

Merci!

EDIT SOLUTION:

mont--;
GregorianCalendar calendar = new GregorianCalendar(year, month, day);
int i = calendar.get(Calendar.DAY_OF_WEEK);

    if(i == 2){
        dayOfTheWeek = "Mon";           
    } else if (i==3){
        dayOfTheWeek = "Tue";
    } else if (i==4){
        dayOfTheWeek = "Wed";
    } else if (i==5){
        dayOfTheWeek = "Thu";
    } else if (i==6){
        dayOfTheWeek = "Fri";
    } else if (i==7){
        dayOfTheWeek = "Sat";
    } else if (i==1){
        dayOfTheWeek = "Sun";
    }
20
Marco Matarazzi
TimeZone timezone = TimeZone.getDefault();
Calendar calendar = new GregorianCalendar(timezone);
calendar.set(year, month, day, hour, minute, second);

String monthName=calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.getDefault());//Locale.US);
String dayName=calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.getDefault());//Locale.US);
13
Benn Sandoval

Joda-Time

J'utilise Joda-Time bibliothèque pour toutes les opérations liées à la date/heure. Joda prend en compte vos paramètres régionaux et obtient les résultats correspondants:

import org.joda.time.DateTime;
DateTime date = new DateTime(year, month, day, 0, 0, 0);

ou

DateTime date = DateTime().now();

Jour de la semaine (int):

date.getDayOfWeek();

Jour de la semaine (chaîne courte) utilisant toString() et DateTimeFormat options:

date.toString("EE");
3
jki

tl; dr

myGregCal                  // `GregorianCalendar` is a legacy class, supplanted by the modern `Java.time.ZonedDateTime` class.
    .toZonedDateTime()     // Convert to `ZonedDateTime`.
    .getDayOfWeek().       // Extract a `DayOfWeek` enum object, one of seven pre-defined objects, one for each day of the week.
    .getDisplayName(       // Automatically localize, generating a `String` to represent the name of the day of the week.
        TextStyle.SHORT ,  // Specify how long or abbreviated.
        Locale.US          // Locale determines the human language and cultural norms used in localization.
    )                      // Returns a `String` object.

Lun

LocalDate.now( ZoneId.of( "Africa/Tunis" ) )              // Get current date for people in a certain region, without time-of-day and without time zone.
.getDayOfWeek()                                           // Extract a `DayOfWeek` enum object.
.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH )  // Generate a string representing that day-of-week, localized using the human language and cultural norms of a particular locale.

lundi

Java.time

Convertissez l'ancien objet problématique Java.util.GregorianCalendar en un objet Java.time moderne en appelant les nouvelles méthodes ajoutées à l'ancienne classe.

ZonedDateTime zdt = myGregCal.toZonedDateTime();

Obtenez l'objet DayOfWeek enum pour ce moment dans ce fuseau horaire.

DayOfWeek dow = zdt.getDayOfWeek();

dow.toString (): MERCREDI

Passez ces objets DayOfWeek autour de votre code plutôt que de passer des entiers tels que 1 à 7 ou des chaînes telles que "MON". En utilisant les objets enum, votre code s'auto-documente plus facilement, vous apportez une sécurité de type et vous garantissez une plage de valeurs valides.

Pour présentation à l'utilisateur, demandez à l'objet DayOfWeek de traduire le nom du jour de la semaine en une langue humaine définie dans une Locale.

String output = 
    dow.getDisplayName( 
        TextStyle.FULL_STANDALONE , 
        Locale.CANADA_FRENCH 
    )
;

mercredi


À propos de Java.time

Le framework {JAVA.TIME} est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes legacy date-heure, telles que Java.util.Date , Calendar , & SimpleDateFormat .

Le projet Joda-Time _ , désormais en mode de maintenance , conseille la migration vers les classes Java.time .

Pour en savoir plus, consultez le tutoriel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Vous pouvez échanger des objets Java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou ultérieur. Pas besoin de chaînes, pas besoin de Java.sql.* classes.

Où obtenir les classes Java.time? 

0
Basil Bourque