Domanda

voglio salvare un oggetto Date in una stringa leggibile (ad esempio 22/10/2009 21:13:14), che è anche analizzabile di nuovo ad un oggetto Date.

Ho provato molte cose e la migliore che ho trovato è stato quello di utilizzare DateFormater per l'analisi e la formattazione, ma ha una battuta d'arresto. Quando si formatta una data si perdono informazioni secondi. Ho cercato di trovare se v'è la possibilità di formattare e visualizzare i secondi (meglio ancora sarebbe al livello di millisecondo dato che è la risoluzione l'oggetto Date consente di avere), ma sono venuto a breve.

Tutte le idee?

È stato utile?

Soluzione

Date un'occhiata a 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

Altri suggerimenti

SimpleDateFormat può formattare e analizzare un data base di un sistema molto semplice modello che includono secondo e persino millisecondi.

Altre risposte sono tutte buone.

Ma quando si fa questo genere di cose scegliere un formato che sorta correttamente quando codificato come una stringa .... "yyyy / MM / GG HH: MM: ss" va bene. Mi stupisce sempre quando gli ingegneri del software scegliere un formato di data che non ordinare in, modo conveniente ovvio.

Si risparmia i tuoi colleghi sviluppatori un sacco di dolore a un certo punto lontano nel futuro - pensare ad esso come un buon karma: -)

Un po 'off-topic, ma mi sento sempre il bisogno di ricordare alla gente che DateFormat e SimpleDateFormat non è thread-safe! La documentazione Sun afferma chiaramente questo, ma io continuo a trovare il codice fuori nel selvaggio dove le persone attaccano un SimpleDateFormat in una statica ...

ISO 8601

ISO 8601 .

  • È flessibile, include secondi e frazione di secondo se ce ne sono, ma si può anche lasciare fuori se sono 0.
  • E 'normale, così formato sempre più strumenti e analizzarlo. Grande per la serializzazione per la conservazione o lo scambio di dati.
  • Si va come 2009-10-22T21:13:14, dovrei dire che è abbastanza leggibile (anche se la T in mezzo che denota l'inizio del part-time può sentirsi inusuale in un primo momento).
  • Le corde sorta correttamente, come richiesto nella mikera un'altra risposta, fino a quando gli anni sono in quattro cifre tra 1000 e 9999.
  • Le classi di java.time, il moderno data e l'ora API Java, così come quelli di Joda fase di analisi ISO 8601 come il loro difetto, cioè, senza alcuna formattazione esplicita, e producono lo stesso formato dai loro metodi toString.

Una modesta semplice dimostrazione di come 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);

Questa stampa due linee identiche:

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

La chiamata System.out.println() Quest'ultimo implicitamente chiama toString() una volta di più, quindi questo non dovrebbe sorprendere.

Se si vuole fare un po 'più semplice, ed essere risparmiato dal fare il proprio DateFormat che la maggior parte altre risposte coinvolgono, è possibile sfruttare il formato predefinito in java.time.Instant :

(new Date()).toInstant.toString();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top