2015-06-02 15 views
34

posso convertire un java.util.Date ad un java.time.Instant (Java 8 e successive) in questo modo:Come convertire un istantaneo in un formato data?

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.HOUR_OF_DAY, 8); 
cal.set(Calendar.MINUTE, 30); 
Date startTime = cal.getTime(); 
Instant i = startTime.toInstant(); 

Qualcuno può farmi sapere circa il convertito quell'istante fino ad oggi con uno specifico formato di data e ora &? i 2015-06-02 8:30:00

Sono passato attraverso API ma non sono riuscito a trovare una risposta soddisfacente.

+0

vuoi un output 'String' con' aaaa-MM-gg H: m: s'? – Blip

+0

C'è qualche ragione particolare per ottenere l'istante da Calendar? e non utilizzare il LocalDate o altre classi java.time? Stai usando il calendario puoi fare Calendar.getTime() che restituirà l'istanza Date. Che in seguito è possibile convertire in qualsiasi formato –

+0

effettivamente dal client ottengo solo oggetti istantanei .. ora ho bisogno di memorizzare la data e l'ora dell'istante nel database. –

risposta

-3
Instant i = Instant.ofEpochSecond(cal.getTime); 

Read more here e here

+0

in realtà ho bisogno di un oggetto data dall'istante. –

+1

La risposta non mostra una stringa di data formattata. –

76

Se si desidera convertire un Instant ad un Date:

Date myDate = Date.from(instant); 

E quindi è possibile utilizzare SimpleDateFormat per la parte di formattazione della tua domanda:

SimpleDateFormat formatter = new SimpleDateFormat("dd MM yyyy HH:mm:ss"); 
String formattedDate = formatter.format(myDate); 
+0

Grazie amico mio. – vikingsteve

7

Un Instant è ciò che dice: uno specifico istante nel tempo - non ha la nozione di data e ora (il tempo a New York e Tokyo non è lo stesso in un dato istante).

Per stamparlo come data/ora, è prima necessario decidere quale fuso orario utilizzare. Per esempio:

System.out.println(LocalDateTime.ofInstant(i, ZoneOffset.UTC)); 

Questo stamperà la data/ora in formato ISO: 2015-06-02T10:15:02.325

Se si desidera un formato diverso è possibile utilizzare un formattatore:

LocalDateTime datetime = LocalDateTime.ofInstant(i, ZoneOffset.UTC); 
String formatted = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss").format(datetime); 
System.out.println(formatted); 
1

cercare l'analisi e la formattazione

Prendi un esempio Parsing

String input = ...; 
try { 
    DateTimeFormatter formatter = 
         DateTimeFormatter.ofPattern("MMM d yyyy"); 
    LocalDate date = LocalDate.parse(input, formatter); 
    System.out.printf("%s%n", date); 
} 
catch (DateTimeParseException exc) { 
    System.out.printf("%s is not parsable!%n", input); 
    throw exc;  // Rethrow the exception. 
} 

Formattazione

ZoneId leavingZone = ...; 
ZonedDateTime departure = ...; 

try { 
    DateTimeFormatter format = DateTimeFormatter.ofPattern("MMM d yyyy hh:mm a"); 
    String out = departure.format(format); 
    System.out.printf("LEAVING: %s (%s)%n", out, leavingZone); 
} 
catch (DateTimeException exc) { 
    System.out.printf("%s can't be formatted!%n", departure); 
    throw exc; 
} 

L'output di questo esempio, che stampa sia l'orario di arrivo e di partenza, è la seguente:

LEAVING: Jul 20 2013 07:30 PM (America/Los_Angeles) 
ARRIVING: Jul 21 2013 10:20 PM (Asia/Tokyo) 

Per maggiori dettagli consultare questa pagina - https://docs.oracle.com/javase/tutorial/datetime/iso/format.html

Problemi correlati