web-dev-qa-db-fra.com

Les constructeurs paramétrés de la classe Java.util.Date sont obsolètes. Quelle est l'alternative?

Que puis-je utiliser pour remplacer ceci, new Date(2009, 12, 9)?

Merci de votre aide.

26
Tim

Idéalement, utilisez plutôt Joda Time . C'est une API infiniment supérieure à celle intégrée. Vous voudriez alors choisir entre LocalDateTime et DateTime selon vos besoins exacts (c'est un domaine compliqué - je ne suis pas va essayer de résumer en une phrase ou deux, mais les docs font du bon travail).

Si absolument nécessaire, utilisez un Java.util.Calendar et convertissez-le en Date lorsque vous en avez besoin.

26
Jon Skeet

Calendrier!

Calendar cal = Calendar.getInstance();
cal.set(2009, Calendar.DECEMBER, 12);

Notez que je n'ai pas mis 12 pour décembre car c'est en fait 11 (janvier est 0).

Ensuite, vous pouvez facilement ajouter ou supprimer des secondes, minutes, heures, jours, mois ou année avec:

cal.add(Calendar.HOUR, 2);
cal.add(Calendar.MONTH, -5);

Et enfin, si vous voulez une date:

cal.getTime();
25
Maxime ARNSTAMM

Si vous regardez le Javadoc il vous indique l'utilisation de Calendar .

Depuis JDK version 1.1, remplacé par Calendar.set (année + 1900, mois, date, heures, min) ou GregorianCalendar (année + 1900, mois, date, heures, min).

Si vous regardez les paramètres du constructeur Date, vous verrez pourquoi il a été déprécié:

Paramètres:

year - the year minus 1900.
month - the month between 0-11.
date - the day of the month between 1-31.
hrs - the hours between 0-23.
min - the minutes between 0-59.

year n'est pas ce que vous attendez, ni month.

Pour représenter la date que vous avez mentionnée, vous devez appeler Date comme ceci (non recommandé)

new Date(2009-1900, 12-1, 9)

L'alternative utilisant Calendar est

Calendar cal = Calendar.getInstance();
cal.set(2009, 11, 9); //year is as expected, month is zero based, date is as expected
Date dt = cal.getTime();
17
pjp

Vous pouvez également utiliser l'objet SimpleDateFormat :

import Java.util.Date;
import Java.text.SimpleDateFormat;
import Java.text.ParseException;


public class DateTest {
    public static void main( String [] args ) throws ParseException {
        SimpleDateFormat sdf =  new SimpleDateFormat("yyyy, MM, dd");
        Date date = sdf.parse("2009, 12, 9");
        System.out.println( date );
    }
}
8
OscarRyz

Tim, dans vos commentaires, vous avez mentionné que vous le faites dans un contexte GXT - c'est-à-dire dans le code client GWT. GWT ne prend pas en charge GregorianCalendar et vous ne pourrez probablement pas mettre JodaTime via le GWTCompiler (vous pouvez peut-être, mais voulez-vous vraiment).

Je pense que vous avez vraiment la possibilité d'utiliser JNSI si vous souhaitez effectuer des opérations de calendrier dans GWT. Voir la classe Date en JavaScript.

4
Nick Hristov
GregorianCalendar(year + 1900, month, date)

http://Java.Sun.com/j2se/1.4.2/docs/api/Java/util/Date.html

2
Dave

Malheureusement, la prise en charge des dates dans Java est complètement horrible. Officiellement, vous devriez probablement le faire avec Calendar, mais cela ne devrait pas être nécessaire à mon avis. Comme d'autres l'ont mentionné, l'heure Joda est bien meilleure, mais pas toujours aussi facile à utiliser que les dates dans Ruby sur Rails.

Je ne connais aucun paquet Java qui vous offre un support de date assez important (Joda manque un peu, mais se rapproche), mais dans Groovy, l'utilisation de TimeCategory vous donne très Ruby sur la prise en charge des dates de type Rails.

2
mcv