Wie formatiere ich Joda-Time DateTime auf nur MM / TT / JJJJ?

189

Ich habe eine Zeichenfolge " 11/15/2013 08:00:00", ich möchte sie auf " 11/15/2013" formatieren. Was ist das richtige DateTimeFormatterMuster?

Ich habe viele ausprobiert und gegoogelt und bin immer noch nicht in der Lage, das richtige Muster zu finden.

edit: Ich suche Joda-Time DateTimeFormatter , nicht Javas SimpleDateFormat ..

iCodeLikeImDrunk
quelle
2
tl; dr: DateTimeFormat.forPattern ("MM / TT / JJJJ HH: MM : SS"). print (DateTime.now ())
Andrew

Antworten:

385

Joda Zeit

Erstellen Sie eine DateTimeFormatterVerwendungDateTimeFormat.forPattern(String)

Mit Joda Time würden Sie es so machen:

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));

Standard Java ≥ 8

In Java 8 wurde eine neue Datums- und Uhrzeitbibliothek eingeführt, die den Umgang mit Datums- und Uhrzeitangaben erleichtert. Wenn Sie Standard Java Version 8 oder höher verwenden möchten, verwenden Sie einen DateTimeFormatter . Da Sie keine Zeitzone in Ihrer String, einer java.time.LocalDateTime oder einer LocalDate haben , können andernfalls die zeitzonierten Sorten ZonedDateTime und ZonedDate verwendet werden.

// 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));

Standard Java <8

Vor Java 8 würden Sie SimpleDateFormat und java.util.Date verwenden

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));
DeltaLima
quelle
7
Entschuldigung, aber ich suche nach DateTimeFormatter von jodatime.
iCodeLikeImDrunk
1
@yaojiang Joda verwendet dieselbe Format-String-Syntax wie SimpleDateFormat. Lesen Sie die API-Dokumentation.
Jesper
@yaojiang Wie Jesper erwähnte, verwendet Joda dieselben Formatierungszeichenfolgen, obwohl es mehr Optionen gibt. Ich habe das Beispiel um Joda erweitert, da es sehr ähnlich ist.
DeltaLima
Seltsamerweise verwende ich DateTimeFormatter dtf = DateTimeFormat.forPattern ("MM / tt / jjjj"); und ich bekomme immer noch "mm / tt / jjjj hh: mm: ss" ...
iCodeLikeImDrunk
2
Während Joda-Time sehr ähnliche Formatierungscodes wie java.util.Date/Calendar verwendet, lesen Sie das Dokument sorgfältig auf subtile Unterschiede. Sie sind nicht identisch.
Basil Bourque
45

Ich füge dies hier hinzu, obwohl die anderen Antworten völlig akzeptabel sind. In JodaTime sind Parser in DateTimeFormat vorgefertigt:

dateTime.toString(DateTimeFormat.longDate());

Dies sind die meisten Optionen, die mit ihrem Format ausgedruckt wurden:

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
Chad Bingham
quelle
1
schön, eine Idee, welche Version dies eingeführt wurde? Sparen Sie viel Zeit, indem Sie keine dummen
Formatzeichenfolgen
Ja, ich stimme vollkommen zu. Es sieht so aus, als wäre es schon immer da gewesen. joda-time.sourceforge.net/apidocs/org/joda/time/format/…
Chad Bingham
21
DateTime date = DateTime.now().withTimeAtStartOfDay();
date.toString("HH:mm:ss")
sebastian krüger
quelle
1
Dies ist nützlich, beantwortet die Frage jedoch nicht genau. Einzeilige Version:DateTime.now().toString("HH:mm:ss")
hBrent
11

Ich denke, das wird funktionieren, wenn Sie JodaTime verwenden:

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);

Ich habe einen Teil davon von hier bekommen .

Der Typ mit dem Hut
quelle
Ihr Link zur Dokumentation ist veraltet. Die richtige URL lautet: joda.org/joda-time/apidocs/org/joda/time/format/…
Basil Bourque
1
@BasilBourque Vielen Dank, dass Sie darauf hingewiesen haben, dass dies Dfür den Tag des Jahres gilt, aber mein "Link zur Dokumentation" ist nicht veraltet: Die Dokumentation, auf die ich verlinkt habe, ist veraltet. Ich habe nicht um seiner selbst willen auf die Dokumentation verlinkt, sondern auf die Seite, von der ich Code erhalten habe - was zufällig eine veraltete Dokumentation ist.
Der Kerl mit dem Hut
10

Ich habe eine sehr dumme, aber funktionierende Option. wenn Sie den String fullDate = "15.11.2013 08:00:00" haben;

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

Das sollte einfach und schnell gehen. :) :)

Gekleidet gekleidet
quelle
Ja, ich werde definitiv das Format ändern. Dies funktioniert aber nur für diesen Fall.
iCodeLikeImDrunk
1
Nicht wirklich erwartetes Verhalten, danach versteht niemand (einschließlich Sie), der Ihren Code sieht, nichts, was Sie hier getan haben ...
Sercan Ozdemir
3

AKTUALISIERT:

Sie können: eine Konstante erstellen:

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

Dieses DateTimeFormat wird importiert von: (seien Sie vorsichtig damit)

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

Analysieren Sie das Datum mit:

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

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

wenn Sie datetime wollen:

DateTime.parse("201711201515", DateTimeFormat.forPattern("yyyyMMddHHmm")).withTimeAtStartOfDay();
Jacky.cheng
quelle
2

Das funktioniert

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();
}
Eddie
quelle
1

Eine andere Möglichkeit ist:

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

Ich bin nicht ganz sicher, aber ich denke, dies könnte schneller sein / weniger Speicher verbrauchen als die .split()Methode.

Der Typ mit dem Hut
quelle