Comment faire des opérations de calendrier dans Java GWT? Comment ajouter des jours à une Date?
Puisque GWT ne fournit pas la classe GregorianCalendar, comment faire des opérations de calendrier sur le client?
J'ai un rendez - a
et je veux la Date, qui est n
jours après a
.
Exemples:
a (2000-01-01) + n (1) -> 2000-01-02
a (2000-01-01) + n (31) -> 2000-02-01
4 réponses
Réponse mise à jour pour GWT 2.1
final Date dueDate = new Date();
CalendarUtil.addDaysToDate(dueDate, 21);
Edit: le nom complet de cette classe est com.Google.gwt.utilisateur.datepicker.client.CalendarUtil.
La réponse que Google semble utiliser (actuellement), est:
@SuppressWarnings("deprecation") // GWT requires Date
public static void addDaysToDate(Date date, int days) {
date.setDate(date.getDate() + days);
}
Il s'agit de la classe com.google.gwt.user.datepicker.client.CalendarUtil
, qui est utilisée par com.google.gwt.user.datepicker.client.DatePicker
. J'imagine, qu'il y aura des problèmes impliqués, en faisant des calculs dans différents fuseaux horaires.
Beaucoup de gens ont déjà voté pour une sorte de Joda temps pour GWT: http://code.google.com/p/google-web-toolkit/issues/detail?id=603 . Le Dernier commentaire indique actuellement qu'il y a une nouvelle fourchette de temps goda, peut-être que nous devrions vraiment le vérifier hors.
private static final long MILLISECONDS_IN_SECOND = 1000l;
private static final long SECONDS_IN_MINUTE = 60l;
private static final long MINUTES_IN_HOUR = 60l;
private static final long HOURS_IN_DAY = 24l;
private static final long MILLISECONDS_IN_DAY = MILLISECONDS_IN_SECOND *
SECONDS_IN_MINUTE *
MINUTES_IN_HOUR *
HOURS_IN_DAY;
public Date addDays (Date date, days)
{
return new Date (date.getTime () + (days * MILLISECONDS_IN_DAY));
}
Cela fonctionnera avec les années bissextiles mais finira par s'égarer de millisecondes sur milléniums lorsque nous ajoutons ou laissons tomber les secondes bissextiles.
J'ai créé une implémentation approximative qui émule le fuseau horaire, le calendrier et les paramètres régionaux. N'hésitez pas à essayer ici: