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";
}
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);
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");
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
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
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?