Bagaimana cara memformat Joda-Time DateTime menjadi hanya mm / hh / tttt?

189

Saya memiliki string " 11/15/2013 08:00:00", saya ingin memformatnya menjadi " 11/15/2013", apa DateTimeFormatterpola yang benar ?

Saya sudah mencoba banyak dan googled dan masih tidak dapat menemukan pola yang benar.

sunting: Saya mencari Joda-Time DateTimeFormatter , bukan Java's SimpleDateFormat ..

iCodeLikeImDrunk
sumber
2
tl; dr: DateTimeFormat.forPattern ("MM / dd / yyyy HH: mm: ss"). print (DateTime.now ())
Andrew

Jawaban:

386

Waktu Joda

Buat DateTimeFormattermenggunakanDateTimeFormat.forPattern(String)

Menggunakan Joda waktu Anda akan melakukannya seperti ini:

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 Standar ≥ 8

Java 8 memperkenalkan perpustakaan Tanggal dan Waktu baru , membuatnya lebih mudah untuk menangani tanggal dan waktu. Jika Anda ingin menggunakan Java versi 8 standar atau lebih, Anda akan menggunakan DateTimeFormatter . Karena Anda tidak memiliki zona waktu di String, java.time.LocalDateTime atau LocalDate Anda , maka varietas waktu yang di-zonasi ZonedDateTime dan ZonedDate dapat digunakan.

// 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 Standar <8

Sebelum Java 8, Anda akan menggunakan SimpleDateFormat dan 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));
DeltaLima
sumber
7
maaf, tapi saya sedang mencari DateTimeFormatter jodatime.
iCodeLikeImDrunk
1
@yaojiang Joda menggunakan sintaks string format yang sama dengan SimpleDateFormat. Baca dokumentasi API.
Jesper
@yaojiang Seperti yang disebutkan Jesper, Joda menggunakan string format yang sama, meskipun memiliki lebih banyak opsi. Saya telah memperluas contoh untuk memasukkan Joda, seperti yang Anda lihat sangat mirip.
DeltaLima
anehnya saya menggunakan DateTimeFormatter dtf = DateTimeFormat.forPattern ("MM / dd / yyyy"); dan saya masih mendapatkan "mm / hh / tttt hh: mm: dd" ...
iCodeLikeImDrunk
2
Sementara Joda-Time menggunakan kode pemformatan yang sangat mirip dengan java.util.Date/Calendar, bacalah dokumen dengan cermat untuk perbedaan yang halus. Mereka tidak identik.
Basil Bourque
45

Saya menambahkan ini di sini meskipun jawaban lain sepenuhnya dapat diterima. JodaTime memiliki parser yang sudah dibuat sebelumnya di DateTimeFormat:

dateTime.toString(DateTimeFormat.longDate());

Ini sebagian besar opsi yang dicetak dengan formatnya:

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
sumber
1
bagus, tahu versi apa yang diperkenalkan ini? menghemat banyak waktu dengan tidak membuat string format bodoh ...
iCodeLikeImDrunk
Ya saya sangat setuju. Sepertinya selalu ada di sana. 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
sumber
1
Ini berguna, meskipun tidak menjawab pertanyaan dengan tepat. Versi satu baris:DateTime.now().toString("HH:mm:ss")
hBrent
11

Saya pikir ini akan berhasil, jika Anda menggunakan 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);

Saya mendapat bagian dari ini dari sini .

The Guy with The Hat
sumber
Tautan Anda ke dokumentasi sudah usang. URL yang benar adalah: joda.org/joda-time/apidocs/org/joda/time/format/…
Basil Bourque
1
@BasilBourque Terima kasih telah menunjukkan bahwa Dini untuk hari tahun, tetapi "tautan ke dokumentasi" saya tidak kedaluwarsa: dokumentasi yang saya tautkan kedaluwarsa. Saya tidak menautkan ke dokumentasi untuk kepentingannya sendiri, saya menghubungkan ke halaman tempat saya mendapatkan beberapa kode — yang kebetulan merupakan dokumentasi yang sudah ketinggalan zaman.
The Guy with The Hat
10

Saya punya pilihan yang sangat bodoh tapi berfungsi. jika Anda memiliki String fullDate = "11/15/2013 08:00:00";

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

Itu seharusnya bekerja dengan mudah dan cepat. :)

Berpakaian Berpakaian
sumber
ya, saya pasti akan mengubah format sekitar. ini berfungsi tetapi hanya untuk kasus ini.
iCodeLikeImDrunk
1
Perilaku yang tidak terlalu diharapkan, setelah itu tidak seorang pun (termasuk Anda) yang melihat kode Anda tidak mengerti apa yang Anda lakukan di sini ...
Sercan Ozdemir
3

DIPERBARUI:

Anda dapat: membuat konstanta:

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

DateTimeFormat ini mengimpor dari: (hati-hati dengan itu)

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

Pisahkan Tanggal dengan:

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

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

jika ingin datetime:

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

Ini bekerja

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
sumber
1

Cara lain untuk melakukan itu adalah:

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

Saya tidak begitu yakin, tapi saya pikir ini mungkin lebih cepat / menggunakan lebih sedikit memori daripada menggunakan .split()metode ini.

The Guy with The Hat
sumber