2010-08-07 2 views
1

D'accord, j'ai le problème le plus étrange que je viens de commencer à éprouver dans une application de grails fonctionne très bien pendant 2 mois. L'application est déployée sur Linux/Tomcat 6 et MySQL est le SGBD au back-end.Grails TimeZone problème, application sage et dans Gorm entiteis

Lorsque je tape date à l'invite de linux, je suis sortie suivante:

$> Date Sun 8 août 03:52:06 PKT 2010

Lorsque, dans l'application Grails new Date() me retourne une date de 5 heures après la date actuelle du système. Le fuseau horaire indiqué dans l'application est GMT. Ce n'était pas le cas au départ. Quoi qu'il en soit, j'ai défini la valeur par défaut du TimeZone sur GMT + 5 dans le bootstrap et redéployé l'application, en espérant que les choses seront corrigées.

La nouvelle date() a été résolue, mais un nouveau problème était visible. Pour toutes les classes de domaine ayant des champs Date mappés à certaines tables de base de données avec les propriétés correspondantes Date uniquement. Je reçois une date dans GUI comme ceci: 2010-08-08 05:00:00

Notez les 05 heures ajoutées au champ de date automatiquement, dans la base de données la valeur dans le champ est Date seulement il n'y a pas d'informations de temps et En fait, je n'ai pas besoin d'informations sur le temps, ça devrait être 00:00:00 comme c'était le cas avant que ce problème ne surgisse.

Étrange n'est ce pas. S'il vous plaît aidez-moi, comme je suis déjà perdu, essayé tant de choses et rien trouvé comme une solution. C'est dommage quand une application impeccable après deux mois commence à produire de tels bugs.

S'il vous plaît aider, en anticipant des réponses positives et rapides.

Cordialement, Alam Sher

Répondre

0

Ma première question est que si vous ne se soucient pas du temps, pourquoi êtes-vous l'afficher dans l'interface utilisateur?

Il semble que Grails suppose que la base de données utilise GMT et ajoute 5 à la date. Quel est le fuseau horaire de votre base de données? L'application et la base de données devraient probablement être synchronisées.

Si vous souhaitez afficher l'heure sur l'interface utilisateur et toujours zéro, vous pouvez mettre à zéro l'heure en utilisant la méthode clearTime() de la classe java.util.Date de Groovy. Voir ici: http://groovy.codehaus.org/groovy-jdk/java/util/Date.html

Comme note, je l'habitude d'utiliser le calendrier pour créer une date en passant dans un fuseau horaire:

Date def = Calendar.getInstance (TimeZone.getTimeZone ("CST")) temps

.
+0

Je ne montre pas l'heure sur l'interface graphique, mais il y a une comparaison entre la date de l'entité et la date actuelle du système. par exemple. Si la date de l'entité est> Date actuelle, alors il y a une chaîne d'état (bloquée) pour cette entité particulière que je dois montrer sur l'interface graphique :) J'ai vérifié que Select now(); dans MySQL retourne une heure qui est correcte. Où, en tant que nouvelle date(), même dans un fichier Java normal renvoie une date erronée avec le fuseau horaire par défaut comme 'GMT'. Comment MySQL obtient correctement les informations de fuseau horaire, et pourquoi java surcharge le fuseau horaire du système en quelque sorte? Version Java du serveur: Environnement d'exécution Java (TM) SE (build 1.6.0_19-b04) –