Come formattare Joda-Time DateTime a solo mm / gg / aaaa?


189

Ho una stringa " 11/15/2013 08:00:00", voglio formattarla su " 11/15/2013", qual è lo DateTimeFormatterschema corretto ?

Ne ho provati molti, ho cercato su Google e non sono ancora riuscito a trovare il modello corretto.

modifica: sto cercando Joda-Time DateTimeFormatter , non il SimpleDateFormat di Java ..


2
tl; dr: DateTimeFormat.forPattern ("MM / gg / aaaa HH: mm: ss"). print (DateTime.now ())
Andrew,

Risposte:


386

Tempo di Joda

Crea un DateTimeFormatterutilizzoDateTimeFormat.forPattern(String)

Usando Joda time lo faresti in questo modo:

String dateTime = "11/15/2013 08:00:00";
// Format for input
DateTimeFormatter dtf = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");
// Parsing the date
DateTime jodatime = dtf.parseDateTime(dateTime);
// Format for output
DateTimeFormatter dtfOut = DateTimeFormat.forPattern("MM/dd/yyyy");
// Printing the date
System.out.println(dtfOut.print(jodatime));

Java standard ≥ 8

Java 8 ha introdotto una nuova libreria di data e ora , semplificando la gestione di date e orari. Se si desidera utilizzare la versione standard Java 8 o successiva, è necessario utilizzare DateTimeFormatter . Dal momento che non hai un fuso orario nel tuo String, un java.time.LocalDateTime o un LocalDate , altrimenti potrebbero essere utilizzate le varietà suddivise in zone ZonedDateTime e ZonedDate .

// Format for input
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
// Parsing the date
LocalDate date = LocalDate.parse(dateTime, inputFormat);
// Format for output
DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy");
// Printing the date
System.out.println(date.format(outputFormat));

Java standard <8

Prima di Java 8, si utilizzava SimpleDateFormat e java.util.Date

String dateTime = "11/15/2013 08:00:00";
// Format for input
SimpleDateFormat dateParser = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
// Parsing the date
Date date7 = dateParser.parse(dateTime);
// Format for output
SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy");
// Printing the date
System.out.println(dateFormatter.format(date7));

7
scusa, ma sto cercando DateTimeFormatter di jodatime.
iCodeLikeImDrunk

1
@yaojiang Joda utilizza la stessa sintassi di stringa del formato di SimpleDateFormat. Leggi la documentazione dell'API.
Jesper,

@yaojiang Come menzionato da Jesper, Joda usa le stesse stringhe di formattazione, sebbene abbia più opzioni. Ho esteso l'esempio per includere Joda, come puoi vedere è molto simile.
DeltaLima,

stranamente sto usando DateTimeFormatter dtf = DateTimeFormat.forPattern ("MM / gg / aaaa"); e ottengo ancora "mm / gg / aaaa hh: mm: ss" ...
iCodeLikeImDrunk

2
Mentre Joda-Time utilizza codici di formattazione molto simili a java.util.Date/Calendar, leggi attentamente il documento per le sottili differenze. Non sono identici.
Basil Bourque,

45

Sto aggiungendo questo qui anche se le altre risposte sono completamente accettabili. JodaTime ha parser predefiniti in DateTimeFormat:

dateTime.toString(DateTimeFormat.longDate());

Questa è la maggior parte delle opzioni stampate con il loro formato:

shortDate:         11/3/16
shortDateTime:     11/3/16 4:25 AM
mediumDate:        Nov 3, 2016
mediumDateTime:    Nov 3, 2016 4:25:35 AM
longDate:          November 3, 2016
longDateTime:      November 3, 2016 4:25:35 AM MDT
fullDate:          Thursday, November 3, 2016
fullDateTime:      Thursday, November 3, 2016 4:25:35 AM Mountain Daylight Time

1
bello, hai idea di quale versione sia stata introdotta? risparmia molto tempo non creando stringhe di formato stupide ...
iCodeLikeImDrunk

Sì, sono totalmente d'accordo. Sembra che sia sempre stato lì. joda-time.sourceforge.net/apidocs/org/joda/time/format/…
Chad Bingham

21
DateTime date = DateTime.now().withTimeAtStartOfDay();
date.toString("HH:mm:ss")

1
Questo è utile, sebbene non risponda esattamente alla domanda. Versione a una riga:DateTime.now().toString("HH:mm:ss")
hBrent

11

Penso che funzionerà, se stai usando JodaTime:

String strDateTime = "11/15/2013 08:00:00";
DateTime dateTime = DateTime.parse(strDateTime);
DateTimeFormatter fmt = DateTimeFormat.forPattern("MM/dd/YYYY");
String strDateOnly = fmt.print(dateTime);

Ne ho preso parte da qui .


Il tuo link alla documentazione è obsoleto. L'URL corretto è: joda.org/joda-time/apidocs/org/joda/time/format/…
Basil Bourque

1
@BasilBourque Grazie per aver sottolineato che Dè per il giorno dell'anno, ma il mio "collegamento alla documentazione" non è obsoleto: la documentazione a cui mi sono collegato non è aggiornata. Non stavo collegando alla documentazione per se stessa, stavo collegando alla pagina da cui ho ottenuto del codice, che risulta essere una documentazione obsoleta.
The Guy with The Hat,

10

Ho un'opzione molto stupida ma funzionante. se hai la stringa fullDate = "15/11/2013 08:00:00";

   String finalDate = fullDate.split(" ")[0];

Dovrebbe funzionare in modo facile e veloce. :)


sì, cambierò sicuramente il formato. funziona ma solo per questo caso.
iCodeLikeImDrunk

1
Comportamento non proprio previsto, in seguito nessuno (incluso te) che osserva il tuo codice non capisce nulla di cosa hai fatto qui ...
Sercan Ozdemir

3

AGGIORNAMENTO:

Puoi: creare una costante:

private static final DateTimeFormatter DATE_FORMATTER_YYYY_MM_DD =
          DateTimeFormat.forPattern("yyyy-MM-dd"); // or whatever pattern that you need.

Questo DateTimeFormat sta importando da: (fai attenzione)

import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter;

Analizza la data con:

DateTime.parse(dateTimeScheduled.toString(), DATE_FORMATTER_YYYY_MM_DD);

Prima:
DateTime.parse ("201711201515", DateTimeFormat.forPattern ("yyyyMMddHHmm")). ToString ("yyyyMMdd");

se vuoi datetime:

DateTime.parse("201711201515", DateTimeFormat.forPattern("yyyyMMddHHmm")).withTimeAtStartOfDay();

2

Questo funziona

String x = "22/06/2012";
String y = "25/10/2014";

String datestart = x;
String datestop = y;

//DateTimeFormatter format = DateTimeFormat.forPattern("dd/mm/yyyy");
SimpleDateFormat  format = new SimpleDateFormat("dd/mm/yyyy");

Date d1 = null;
Date d2 = null;

try {
    d1 =  format.parse(datestart);
    d2 = format.parse(datestop);

    DateTime dt1 = new DateTime(d1);
    DateTime dt2 = new DateTime(d2);

    //Period
    period = new Period (dt1,dt2);

    //calculate days
    int days = Days.daysBetween(dt1, dt2).getDays();


} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

1

Un altro modo di farlo è:

String date = dateAndTime.substring(0, dateAndTime.indexOf(" "));

Non sono esattamente sicuro, ma penso che questo potrebbe essere più veloce / utilizzare meno memoria rispetto all'utilizzo del .split()metodo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.