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.