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é?

Était-ce utile?

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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top