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 ..


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

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

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

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 .


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. :) :)


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

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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.