2015-02-16 26 views
5

Devo essere in grado di memorizzare la data corrente (anno, mese, giorno) e l'ora (Ora, min, sec) in un file CSV e leggerli in seguito.Leggere e scrivere data e ora nel file CSV

Per la creazione di Data ho provato ad usare

Date date = new Date(); 

per costruire la data corrente, ma quando ho

date.toString(); 

mi dà una stringa molto elegante che descrive la data e l'ora, che non sembra in grado di memorizzare nel file CSV e di essere letto in seguito. Quindi, come posso scrivere sul file CSV in un formato che può essere letto in seguito?

Inoltre, la lettura del file CSV, ho trovato suggerimenti come

SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
Date d = df.parse("17/02/2015 01:18:15"); 

questo è possibile, in base al formato dell'output precedente? E quali eccezioni devo prendere con questo uso?

Apprezzare qualsiasi aiuto. Grazie

+0

Quasi tutti i metodi di classe [Data] (http://docs.oracle.com/javase/7/docs/api/java/util/Date.html) sono deprecati a favore di [Calendario] (http: //docs.oracle.com/javase/7/docs/api/java/util/Calendar.html) o [GregorianCalendar] (http://docs.oracle.com/javase/7/docs/api/java/util /GregorianCalendar.html) in Java7. – adamdc78

+1

Non esiste un formato di data standard per i file CSV, quindi è necessario scoprire (o definire) quale formato di data dovrebbe essere usato per il proprio caso particolare e usarlo. –

+0

(Il problema con 'Date.toString' è che produrrà una stringa come" Monday, Feb 16 2015 "e la virgola incorporata sconvolgerà l'analisi CSV.) –

risposta

2

Per scrivere un appuntamento con un formato di data:

DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
Date date = new Date(); 
System.out.println(df.format(date)); 

per analizzare una data, si utilizza lo stesso formato:

DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
Date date = df.parse("17/02/2015 01:18:15"); 

A seconda del caso d'uso, si potrebbe anche trovare vale la pena impostare il fuso orario in modo esplicito (ad es. in UTC) in modo da ottenere gli stessi risultati indipendentemente dal fuso orario della macchina locale/ora legale ecc.

df.setTimeZone(TimeZone.getTimeZone("UTC")); 

In alternativa è possibile utilizzare la base long (millisecondi dalla epoca) che una data è costruito in cima a ...

Per scrivere:

Date date = new Date(); 
System.out.println(date.getTime()); 

Per leggere:

long dateValue = // As read from the file 
Date date = new Date(dateValue); 

Personalmente, userei uno DateFormat, anche se è più prolisso e più lavoro, in quanto renderà il contenuto del file leggibile.

Se si desidera assistenza nella lettura/scrittura di file o gestione delle eccezioni, suggerisco di fare domande separate.

+0

grazie aetheria, ora ha molto più senso – chris

1

Si potrebbe provare a memorizzare i dati come Unix Timestamp (semplicemente un numero lungo).

Read this question per capire come ottenere il timestamp di unix e this per capire come riconvertirlo in un oggetto Date.