Converti java.util.Date in String

Voglio convertire un object java.util.Date in una String in Java.

Il formato è 2010-05-30 22:15:52

In Java, converti una data in una stringa usando una stringa di formato:

 // Create an instance of SimpleDateFormat used for formatting // the string representation of date (month/day/year) DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); // Get the date today using Calendar object. Date today = Calendar.getInstance().getTime(); // Using DateFormat format method we can create a string // representation of a date with the defined format. String reportDate = df.format(today); // Print what date is today! System.out.println("Report Date: " + reportDate); 

Da http://www.kodejava.org/examples/86.html

 Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String s = formatter.format(date); 

Date-lang DateFormatUtils è pieno di chicche (se hai commons-lang nel tuo classpath)

 //Formats a date/time into a specific pattern DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS"); 

tl; dr

 myUtilDate.toInstant() // Convert `java.util.Date` to `Instant`. .atOffset( ZoneOffset.UTC ) // Transform `Instant` to `OffsetDateTime`. .format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // Generate a String. .replace( "T" , " " ) // Put a SPACE in the middle. 

2014-11-14 14:05:09

java.time

Il modo moderno è con le classi java.time che ora soppiantano le fastidiose vecchie lezioni di data-ora legacy.

Prima converti il ​​tuo java.util.Date in un Instant . La class Instant rappresenta un momento sulla timeline in UTC con una risoluzione di nanosecondi (fino a nove (9) cifre di una frazione decimale).

Le conversioni da / per java.time vengono eseguite con nuovi metodi aggiunti alle vecchie classi.

 Instant instant = myUtilDate.toInstant(); 

Sia java.util.Date che java.time.Instant sono in UTC . Se vuoi vedere la data e l’ora come UTC, così sia. Chiama toString per generare una stringa nel formato ISO 8601 standard .

 String output = instant.toString(); 

2014-11-14T14: 05: 09Z

Per altri formati, è necessario trasformare il tuo Instant in OffsetDateTime più flessibile.

 OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ); 

odt.toString (): 2014-11-14T14: 05: 09 + 00: 00

Per ottenere una stringa nel formato desiderato, specificare un DateTimeFormatter . È ansible specificare un formato personalizzato. Ma vorrei usare uno dei formattatori predefiniti ( ISO_LOCAL_DATE_TIME ) e sostituire il T nel suo output con uno SPAZIO.

 String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) .replace( "T" , " " ); 

2014-11-14 14:05:09

A proposito, non consiglio questo tipo di formato in cui si perde intenzionalmente l’ offset da UTC o le informazioni sul fuso orario. Crea ambiguità sul significato del valore data-ora di quella stringa.

Prestare attenzione anche alla perdita di dati, poiché ogni frazione del secondo viene ignorata (troncata efficacemente) nella rappresentazione della stringa del valore data-ora.

Per vedere lo stesso momento attraverso l’objective dell’orologio da parete di una determinata regione, applica un ZoneId per ottenere un ZonedDateTime .

 ZoneId z = ZoneId.of( "America/Montreal" ); ZonedDateTime zdt = instant.atZone( z ); 

zdt.toString (): 2014-11-14T14: 05: 09-05: 00 [America / Montreal]

Per generare una stringa formattata, fai lo stesso come sopra ma sostituisci odt con zdt .

 String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) .replace( "T" , " " ); 

2014-11-14 14:05:09

Se esegui questo codice un numero molto elevato di volte, potresti voler essere un po ‘più efficiente ed evitare la chiamata a String::replace . Eliminare la chiamata riduce anche il tuo codice. Se lo si desidera, specificare il proprio modello di formattazione nel proprio object DateTimeFormatter . Memorizza in cache questa istanza come costante o membro da riutilizzare.

 DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ); // Data-loss: Dropping any fractional second. 

Applica quel formattatore passando l’istanza.

 String output = zdt.format( f ); 

A proposito di java.time

Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantano le fastidiose vecchie classi data-time come java.util.Date , .Calendar e & java.text.SimpleDateFormat .

Il progetto Joda-Time , ora in modalità di manutenzione , consiglia la migrazione a java.time.

Per saperne di più, consultare l’ esercitazione Oracle . E cerca Stack Overflow per molti esempi e spiegazioni.

Gran parte della funzionalità java.time è back-porting su Java 6 e 7 in ThreeTen-Backport e ulteriormente adattata ad Android in ThreeTenABP (vedi Come usare … ).

Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un terreno di prova per possibili aggiunte future a java.time.

One-liner altenative in java semplice:

 String.format("The date: %tY-%tm-%td", date, date, date); String.format("The date: %1$tY-%1$tm-%1$td", date); String.format("Time with tz: %tY-% 

Questo utilizza Formatter e indicizzazione relativa invece di SimpleDateFormat che non è thread-safe , btw.

Leggermente più ripetitivo ma richiede solo una dichiarazione. Questo può essere utile in alcuni casi.

Perché non usi Joda (org.joda.time.DateTime)? È fondamentalmente un one-liner.

 Date currentDate = GregorianCalendar.getInstance().getTime(); String output = new DateTime( currentDate ).toString("yyyy-MM-dd HH:mm:ss"); // output: 2014-11-14 14:05:09 

Sembra che tu stia cercando SimpleDateFormat .

Formato: aaaa-MM-gg kk: mm: ss

 public static String formateDate(String dateString) { Date date; String formattedDate = ""; try { date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss",Locale.getDefault()).parse(dateString); formattedDate = new SimpleDateFormat("dd/MM/yyyy",Locale.getDefault()).format(date); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return formattedDate; } 

Il modo più semplice per usarlo è il seguente:

 currentISODate = new Date().parse("yyyy-MM-dd'T'HH:mm:ss", "2013-04-14T16:11:48.000"); 

dove “yyyy-MM-dd’T’HH: mm: ss” è il formato della data di lettura

uscita: dom apr 14 16:11:48 EEST 2013

Note: HH vs hh – HH si riferisce al formato orario 24 ore – hh si riferisce al formato 12 ore

Se hai bisogno solo del tempo dalla data, puoi semplicemente usare la funzione di String.

 Date test = new Date(); String dayString = test.toString(); String timeString = dayString.substring( 11 , 19 ); 

Questo taglierà automaticamente la parte temporale della stringa e la salverà all’interno di timeString .

Ecco alcuni esempi di utilizzo della nuova API Java 8 Time per formattare legacy java.util.Date :

  DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z") .withZone(ZoneOffset.UTC); String utcFormatted = formatter.format(date.toInstant()); ZonedDateTime utcDatetime = date.toInstant().atZone(ZoneOffset.UTC); String utcFormatted2 = utcDatetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z")); // gives the same as above ZonedDateTime localDatetime = date.toInstant().atZone(ZoneId.systemDefault()); String localFormatted = localDatetime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME); // 2011-12-03T10:15:30+01:00[Europe/Paris] String nowFormatted = LocalDateTime.now().toString(); // 2007-12-03T10:15:30.123 

È bello su DateTimeFormatter che può essere memorizzato nella cache in modo efficiente poiché è thread-safe (a differenza di SimpleDateFormat ).

Elenco di fomatters e riferimenti di notazione del pattern predefiniti .

Crediti:

Come analizzare / formattare le date con LocalDateTime? (Java 8)

Conversione Java8 java.util.Date in java.time.ZonedDateTime

Formato da Instant a String

Qual è la differenza tra java 8 ZonedDateTime e OffsetDateTime?

In colpo singolo;)

Per ottenere la data

 String date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date()); 

Per ottenere il tempo

 String time = new SimpleDateFormat("hh:mm", Locale.getDefault()).format(new Date()); 

Per ottenere la data e l’ora

 String dateTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefaut()).format(new Date()); 

Felice codifica 🙂

 public static void main(String[] args) { Date d = new Date(); SimpleDateFormat form = new SimpleDateFormat("dd-mm-yyyy hh:mm:ss"); System.out.println(form.format(d)); String str = form.format(d); // or if you want to save it in String str System.out.println(str); // and print after that } 

Proviamo questo

 public static void main(String args[]) { Calendar cal = GregorianCalendar.getInstance(); Date today = cal.getTime(); DateFormat df7 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { String str7 = df7.format(today); System.out.println("String in yyyy-MM-dd format is: " + str7); } catch (Exception ex) { ex.printStackTrace(); } } 

O una funzione di utilità

 public String convertDateToString(Date date, String format) { String dateStr = null; DateFormat df = new SimpleDateFormat(format); try { dateStr = df.format(date); } catch (Exception ex) { ex.printStackTrace(); } return dateStr; } 

Da Convertire data a stringa in Java

Prova questo,

 import java.text.ParseException; import java.text.SimpleDateFormat; public class Date { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strDate = "2013-05-14 17:07:21"; try { java.util.Date dt = sdf.parse(strDate); System.out.println(sdf.format(dt)); } catch (ParseException pe) { pe.printStackTrace(); } } } 

Produzione:

 2013-05-14 17:07:21 

Per ulteriori informazioni sulla formattazione di data e ora in java, fare riferimento ai collegamenti di seguito

Centro assistenza Oracle

Esempio di data e ora in java

  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date = "2010-05-30 22:15:52"; java.util.Date formatedDate = sdf.parse(date); // returns a String when it is parsed System.out.println(sdf.format(formatedDate)); // the use of format function returns a String