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.