2014-04-14 5 views

risposta

120

Sostituire

new Timestamp(); 

con

new java.util.Date() 

perché non c'è nessun costruttore predefinito per Timestamp, oppure è possibile farlo con il metodo:

new Timestamp(System.currentTimeMillis()); 
+6

Ancora meglio in Java 8: http: //docs.oracle.com/javase/tutorial/datetime/ – nimsson

97

Utilizzare la classe java.util.Date anziché il Timestamp.

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date()); 

In questo modo si ottiene la data corrente nel formato specificato.

+4

Questo mi ha aiutato e mi ha fatto un po 'cambiata così non devo importare 'nuova Java. text.SimpleDateFormat ("gg/MM/aaaa HH: mm: ss"). format (new java.util.Date()) ' –

+0

Meglio' nuovo SimpleDateFormat ("aaaa.MM.dd HH: mm: ss"). format (new Date()) '; – Zon

26

È possibile fare uso di java.util.Date invece di Timestamp:

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date()); 
5

Un approccio più appropriato è quello di indicare una regione Locale come parametro nel costruttore. L'esempio seguente utilizza una regione locale statunitense. formattazione della data è sensibile-locale e utilizza il Locale di adattare le informazioni relative ai costumi e le convenzioni della regione dell'utente Locale (Java Platform SE 7)

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date()); 
+1

Non esiste una "Zona locale". Sospetto che tu stia confondendo "Locale" e fuso orario che non sono correlati. 'Locale' controlla le norme culturali per la formattazione e il linguaggio umano utilizzato per il nome del mese/giorno. Il fuso orario regola la rappresentazione in base alla data per essere appropriata per [l'ora dell'orologio a muro] di alcune regioni (https://en.wikipedia.org/wiki/Wall_clock_time). Nel caso di questa domanda, Locale è irrilevante in quanto non ci sono problemi di formattazione con cui applicare le norme culturali né ci sono nomi di mese/giorno da localizzare in una particolare lingua umana. –

+0

@BasilBourque Grazie per l'input. Ho aggiornato la risposta per essere più esplicita – user3144836

11

Usa java.sql solo per il trasferimento del database

I tipi java.sql, come ad come java.sql.Timestamp, dovrebbe essere usato solo per il trasferimento dentro e fuori dal database. Converti immediatamente in tipi java.time in Java 8 e versioni successive.

java.time.Instant

A java.sql.Timestamp mappe ad un java.time.Instant, un momento sulla timeline in UTC.

java.sql.Timestamp ts = myResultSet.getTimestamp(…); 
Instant instant = ts.toInstant(); 

Time Zone

Applicare il/fuso orario desiderato prevede di ottenere un ZonedDateTime.

ZoneId zoneId = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId); 

formattati Strings

Utilizzare un DateTimeFormatter per generare la stringa. I codici di pattern sono simili a quelli di java.text.SimpleDateFormat ma non esattamente, quindi leggi attentamente il documento.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu.MM.dd.HH.mm.ss"); 
String output = zdt.format(formatter); 

Questo formato particolare è ambigua sul suo significato esatto in quanto manca qualsiasi indicazione di offset-from-UTC o il fuso orario.

ISO 8601

Se avete qualche voce in capitolo, vi consiglio di considerare l'utilizzo di standard di ISO 8601 formati piuttosto che rotolare il proprio. Il formato standard è abbastanza simile al tuo. Ad esempio:
2016-02-20T03:26:32+05:30.

Le classi java.time utilizzano questi formati standard per impostazione predefinita, quindi non è necessario specificare un modello. La classe ZonedDateTime estende il formato standard aggiungendo il nome del fuso orario (un miglioramento saggia).

String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris] 

Converti in java.sql

È possibile convertire da java.time torna a java.sql.Timestamp. Estrarre un Instant dal ZonedDateTime.

Nuovi metodi sono stati aggiunti alle classi precedenti per facilitare la conversione in/da classi java.time.

java.sql.Timestamp ts = java.sql.Timestamp.from(zdt.toInstant());