Question

Je veux enregistrer un objet Date à une chaîne lisible (par exemple 22/10/2009 21:13:14) qui est analysable également revenir à un objet Date.

J'ai essayé beaucoup de choses et le mieux que je pouvais trouver était d'utiliser DateFormater pour l'analyse syntaxique et formattage, mais il a un revers. Lorsque vous formatez une date que vous perdez des informations secondes. J'ai essayé de trouver s'il y a une option pour formater et afficher les secondes (serait encore mieux au niveau de milliseconde puisque c'est la résolution de l'objet Date vous permet d'avoir), mais je suis venu court.

Toutes les idées?

Était-ce utile?

La solution

Jetez un oeil à java.text.SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS");
Date dt = new Date();
String S = sdf.format(dt); // formats to 09/23/2009 13:53:28.238
Date dt2 = sdf.parse(S); // parses back

Autres conseils

SimpleDateFormat peut formater et analyser une date basée sur un système de configuration très simple qui comprend la seconde et même millisecondes.

D'autres réponses sont bonnes.

Mais quand faire ce genre de chose s'il vous plaît choisir un format trier correctement lorsqu'il est codé comme une chaîne .... « yyyy / MM / dd HH: mm: ss » est très bien. Il me stupéfie toujours quand les ingénieurs logiciels de choisir un format de date qui ne trie pas dans l'évidence, moyen pratique.

Vous économiserez vos collègues développeurs beaucoup de douleur à un moment donné dans l'avenir lointain - penser comme bon karma: -)

Un peu hors sujet, mais je me sens toujours le besoin de rappeler aux gens que DateFormat et SimpleDateFormat sont pas thread-safe! La documentation Sun indique clairement, mais je continue à trouver le code dans la nature où les gens collent un SimpleDateFormat dans un statique ...

ISO 8601

Utilisez ISO 8601 format .

  • Il est flexible, il comprend secondes et fraction de seconde s'il y en a, mais vous pouvez aussi les laisser s'ils sont 0.
  • Il est standard, donc de plus en plus le format d'outils et de l'analyser. Idéal pour sérialisation pour le stockage ou l'échange de données.
  • Il va comme 2009-10-22T21:13:14, je dois dire qu'il est assez lisible par l'homme (bien que le T au milieu qui indique le début de la partie de temps peut se sentir inhabituel au début).
  • Les chaînes tri correctement, comme demandé dans mikera autre réponse, tant que les années sont à quatre chiffres plage allant de 1000 à 9999.
  • Les classes de java.time, la date de Java moderne et API temps, ainsi que ceux du temps Joda Parse ISO 8601 comme par défaut, qui est, sans aucun formatter explicite et produire le même format de leurs méthodes de toString.

Une démonstration modeste de l'utilisation java.time:

LocalDateTime dateTime = LocalDateTime.of(2009, 10, 22, 21, 13, 14);
String readableString = dateTime.toString();
System.out.println(readableString);
LocalDateTime parsedBack = LocalDateTime.parse(readableString);
System.out.println(parsedBack);

Cette affiche deux lignes identiques:

2009-10-22T21:13:14
2009-10-22T21:13:14

Le dernier appel System.out.println() appelle implicitement une fois de plus, toString() donc cela ne devrait pas surprendre.

Si vous voulez faire un peu plus simple, et être épargné de faire votre propre DateFormat que la plupart des autres réponses impliquent, vous pouvez exploiter le format par défaut dans java.time.Instant :

(new Date()).toInstant.toString();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top