Pourquoi est-SimpleDateFormat pas correctement ma date analyse pas?
-
29-09-2019 - |
Question
J'essaie d'éviter réinstallant Eclipse pour résoudre ce , donc j'espère aider quelqu'un peut avec ce problème de date-analyse syntaxique. Voici ce que je fais.
DateFormat dateFormat;
C'est une variable dans ma classe. Je l'ai mis à la suivante.
dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// Example input: 2010-11-07 16:00:00
Quand une autre méthode est appelée, je crée une nouvelle instance de java.sql.Date en utilisant des chaînes qui sont transmis. Par souci de clarté, voici une version abrégée.
public void aMethod (String activateTime, String expireTime) {
Date example = new Date(dateFormat.parse(activateTime).getTime());
Date example2 = new Date(dateFormat.parse(expireTime).getTime());
}
Quand je regarde les chaînes résultant de ces opérations (simple ajout .toString () à instanciations ci-dessus), je reçois la sortie suivante
2010-10-30
2010-11-29
... au lieu des chaînes d'entrée, qui sont déclarés être ...
2010-10-30 17:00:00
2010-11-29 16:00:00
Quelqu'un sait pourquoi il ne me donne pas une date dans le modèle que je spécifié?
La solution
Les javadocs pour java.sql.Date
préciser que la méthode toString renvoie une chaîne au format « aaaa-mm-jj », donc vous seeeing le comportement correct. L'objet Date
n'a pas connaissance du formateur que vous avez utilisé pour le créer. Pour obtenir une sortie dans le même format utiliser la méthode DateFormat.format
plutôt que toString
:
public void aMethod (String activateTime, String expireTime) {
Date example = new Date(dateFormat.parse(activateTime).getTime());
Date example2 = new Date(dateFormat.parse(expireTime).getTime());
System.out.println(example.toString() + " vs " + dateFormat.format(example));
System.out.println(example2.toString() + " vs " + dateFormat.format(example2));
}
Autres conseils
Le java.sql.Date
ne contient que les Date partie de datetime. Vous voulez probablement utiliser java.sql.Timestamp
à la place.
Timestamp example = new Timestamp(dateFormat.parse(activateTime).getTime());
Timestamp example2 = new Timestamp(dateFormat.parse(expireTime).getTime());
Il fonctionne aussi comme ça dans la base de données SQL moyenne. Le type de données DATE
ne représente que la date, le type de données TIME
ne représente que le temps. Le type de données TIMESTAMP
(parfois appelé DATETIME
) représente la date et l'heure.
Notez que votre modèle d'heure est incorrect. Avec les exemples donnés, vous préféreriez comme à l'utilisation HH
au lieu de hh
. Voir aussi la SimpleDateFormat
javadoc .
Voir aussi:
Avez-vous essayé de changer java.sql.Date à java.util.Date?