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


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

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

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

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 .


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


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

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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.