Je dois utiliser Java.util.Calendar au point d’entrée GWT, mais une erreur s’est produite lors de l’exécution de l’application, c’est parce que GWT n’est pas en mesure de trouver le code source, puis-je résoudre ce problème.
Merci d'avance!!!
Java.util.Calendar n'est pas une classe émulée. Vous pouvez trouver une liste des classes émulées ici:
http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.html
Je conseillerais fortement de ne pas utiliser de bibliothèque de date/calendrier du côté client. Vous ne risquez probablement que d'avoir des ennuis. En fait, même si Java.sql.Date et Java.util.Date sont émulés dans GWT, je ne les utiliserais pas non plus. Si vous souhaitez utiliser Calendrier, il est probable que vous souhaitiez prendre en charge les fuseaux horaires sur le client. En utilisant les classes Date émulées, vous devrez en quelque sorte convertir la Date du client du fuseau horaire du navigateur en un fuseau horaire cible (GMT ou quel que soit l'utilisateur défini dans les préférences de l'utilisateur?). Ce sera très certainement sujet aux erreurs. L'utilisation de TimeZone de GWT ajoute d'autres problèmes. Par exemple, comment mappez-vous entre les TimeZones Java et les TimeZones GWT?
Je recommande de faire toutes les manipulations de date ET le formatage sur le serveur. Sur le client, vous pouvez simplement utiliser un triplet date/mois/année. Le serveur peut avoir une association entre l'utilisateur (ou l'organisation) et Java.util.TimeZone (ou le fuseau horaire joda). En utilisant le triplet et le fuseau horaire, vous pouvez facilement créer l’instance spécifique dans le temps.
Vous pourrez peut-être utiliser com.google.gwt.user.datepicker.client.CalendarUtil
.
Non, il n'y a aucun moyen d'utiliser le Java.util.Calendar
dans GWT car il n'y a pas d'équivalent en JavaScript. Mais il y a une demande acceptée feature pour elle. Peut-être trouverez-vous des indices dans les commentaires de la demande.
La section suivante montre comment utiliser Joda Time pour extraire toute information de date d’un type Java Date
avec la fonction Joda Times format()
et l’utiliser pour créer une new Date()
à l’aide de la fonction parse()
de Joda Time.
static DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss.SSS");
static DateTimeFormat datefmt = DateTimeFormat.getFormat("yyyy-MM-dd ");
static DateTimeFormat timefmt = DateTimeFormat.getFormat("HH:mm:ss.SSS");
public Date getDateTime(Date date, Date time) {
String datetime = datefmt.format(date) + timefmt.format(time);
return dtf.parse(datetime);
}
Pour ceux qui préfèrent implémenter directement le calcul, voici une solution pour ajouter des jours à un objet de date existant sans utiliser le calendrier ni aucune fonction dépréciée:
private Date addDays(Date dateIn, int numDays)
{
long milisPerDay = 86400000;
// convert the dateIn to milliseconds
long dateInMilis = dateIn.getTime();
// add numDays to the date
dateInMilis = dateInMilis + (numDays * milisPerDay);
return new Date(dateInMilis);
}
Voici comment obtenir l'année en cours sous forme de chaîne (très utile pour les notices de copyright)
long time = System.currentTimeMillis();
long milisPerYear = new BigInteger("31536000000").longValue();
String currentYear = String.valueOf((int) Math.floor(time / milisPerYear) + 1970);
Avec Google, il est facile de trouver les constantes telles que le nombre de millisecondes par jour, par an, etc. La partie délicate consiste à ajouter des mois, car le nombre de millisecondes dans un mois dépendra du mois. S'il y a une demande pour cela, je serais heureux d'écrire une fonction et de la poster ici afin d'ajouter et de soustraire des mois.
Avez-vous essayé d'ajouter le code actuel de la classe à votre projet? Certaines classes du SDK Java se compilent bien, même si elles ne figurent pas dans la liste blanche JRE.