2014-09-05 4 views
5

Esiste una lettera per i millisecondi dal 1970 in SimpleDateFormat? Conosco il metodo getTime() ma voglio definire un modello di data e ora contenente i millisecondi.Esiste una lettera per i millisecondi dal 1970 in SimpleDateFormat?

+2

Riesci a leggere la pagina si è collegato? Se c'è, sarà elencato lì. – icza

+0

http://stackoverflow.com/questions/4142313/java-convert-milliseconds-to-time-format?rq=1 – aldanux

+1

Secondo [i documenti] (http://docs.oracle.com/javase/7/ docs/api/java/text/SimpleDateFormat.html) non sembra che ce ne sia uno – Clive

risposta

6

SimpleDateFormat non ha un simbolo (lettera) per l'inserimento dei millisecondi dall'inizio dell'epoca a partire dal 1 gennaio 1970 00:00:00 UTC.

Motivo: Francamente basta inserire i millisecondi dall'inizio dell'epoca è solo inserendo il valore long restituito da Date.getTime(), il valore come un istante nel tempo (Date) è represeneted, che non è molto utile quando il vostro obiettivo è quello di creare una stringa data/ora leggibile e formattata. Quindi non vedo che avere un simbolo per questo sia giustificato. Puoi aggiungere facilmente questo numero o includere il suo valore come faresti con qualsiasi altro numero semplice.

Tuttavia, c'è un'alternativa: String.format()

String.format() utilizza un format string che supporta anche Data/Ora conversioni che è molto simile al modello di SimpleDateFormat.

per esempio c'è un simbolo 'H' per l'Ora del giorno (24 ore), 'm' per il mese (due cifre), ecc, così nella maggior parte dei casi String.format() possono essere utilizzati al posto di SimpleDateFormat.

Quello che ti interessa è anche un simbolo: 'Q': millisecondi dall'inizio dell'epoca a partire dal 1 gennaio 1970 00:00:00 UTC.

Cosa c'è di meglio, String.format() è abbastanza flessibile da accettare entrambi i valori long e Date s come parametro di input per le conversioni di Data/Ora.

Usage:

System.out.println(String.format("%tQ", System.currentTimeMillis())); 
System.out.println(String.format("%tQ", new Date())); 

// Or simply: 
System.out.printf("%tQ\n", System.currentTimeMillis()); 
System.out.printf("%tQ\n", new Date()); 

// Full date+time+ millis since epoc: 
Date d = new Date(); 
System.out.printf("%tF %tT (%tQ)", d, d, d); 
// Or passing the date only once: 
System.out.printf("%1$tF %1$tT (%1$tQ)", d); 

// Output: "2014-09-05 11:15:58 (1409908558117)"