Bagaimana memformat LocalDate ke string?


156

Saya memiliki tanggal variabel LocalDate disebut, ketika saya mencetaknya menampilkan 1988-05-05 Saya perlu mengonversi ini untuk dicetak sebagai 05 Mei Mei 1988.Cara melakukan ini?


3
Lihatlah kelas DateTimeFormatter . Ia bahkan memiliki contoh bagaimana mengkonversi ke dan dari Strings.
azurefrog

2
Anda harus menunjukkan beberapa kode, apa yang telah Anda coba sejauh ini dan apa yang tidak berfungsi sehingga orang dapat membantu Anda.
bvidal

Saya mencoba melakukan itu tetapi karena hal yang "tidak memenuhi standar kualitas kami" yang menjengkelkan ini akhirnya saya menyerah, saya butuh waktu 15 menit untuk memposting ini karena saya harus memperbaiki "saya" dengan "saya".
Jasko

Jawaban:


306

SimpleDateFormat tidak akan berfungsi jika dia memulai dengan LocalDate yang baru di Java 8. Dari apa yang saya lihat, Anda harus menggunakan DateTimeFormatter, http://docs.oracle.com/javase/8/docs/api/java/ waktu / format / DateTimeFormatter.html .

LocalDate localDate = LocalDate.now();//For reference
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd LLLL yyyy");
String formattedString = localDate.format(formatter);

Itu harus mencetak 05 Mei 1988. Untuk mendapatkan periode setelah hari dan sebelum bulan, Anda mungkin harus menggunakan "dd'.LLL yyyy"


4
Terima kasih banyak, ini membantu, tetapi tidak bekerja dengan 'LLLL' untuk menunjukkan nama bulan tetapi dengan 'MMMM' saya menemukan ini aneh karena bahkan dalam dokumentasi dikatakan sebaliknya. Tetapi sekali lagi terima kasih telah membantu saya .
Jasko

2
Sekarang localDate.format (formatter); tidak bekerja sama sekali
EngineSense

versi mana JDK Anda Menggunakan @ProgrammersBlock
Lova Chittumuri

29

Bisa sependek:

LocalDate.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));

3
System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("dd.MMMM yyyy")));

Jawaban di atas menunjukkannya untuk hari ini


ofPatterns membutuhkan android O
Mahdi

0

Dengan bantuan posting ProgrammersBlock saya datang dengan ini. Kebutuhan saya sedikit berbeda. Saya perlu mengambil string dan mengembalikannya sebagai objek LocalDate. Saya diberi kode yang menggunakan Kalender dan SimpleDateFormat yang lebih lama. Saya ingin membuatnya sedikit lebih terkini. Inilah yang saya pikirkan.

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;


    void ExampleFormatDate() {

    LocalDate formattedDate = null;  //Declare LocalDate variable to receive the formatted date.
    DateTimeFormatter dateTimeFormatter;  //Declare date formatter
    String rawDate = "2000-01-01";  //Test string that holds a date to format and parse.

    dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE;

    //formattedDate.parse(String string) wraps the String.format(String string, DateTimeFormatter format) method.
    //First, the rawDate string is formatted according to DateTimeFormatter.  Second, that formatted string is parsed into
    //the LocalDate formattedDate object.
    formattedDate = formattedDate.parse(String.format(rawDate, dateTimeFormatter));

}

Semoga ini akan membantu seseorang, jika ada yang melihat cara yang lebih baik dalam melakukan tugas ini, silakan tambahkan masukan Anda.


Saya melihat cara yang lebih baik: adil LocalDate.parse(rawDate)! String.formatsedang digunakan dalam bentuk yang salah total di sini, sebenarnya hanya mengembalikan string pertama; yang DateTimeFormattertidak digunakan sama sekali; parseadalah staticmetode LocalDate; formattedDateadalah tidak tanggal diformat, bahkan tidak String(seperti yang diminta dalam pertanyaan)
user85421

0

Ada cara bawaan untuk memformat LocalDate untuk joda lib

import org.joda.time.LocalDate;

LocalDate localDate = LocalDate.now();
String dateFormat = "MM/dd/yyyy";
localDate.toString(dateFormat);

Jika Anda belum memilikinya - tambahkan ini ke build.gradle:

implementation 'joda-time:joda-time:2.9.5'

Selamat coding! :)


1
Tidak menurut javadoc.
Edward

@Edward, jika tidak, buktikan dan berikan solusi yang menurut Anda lebih baik.
Inoy

1
Anda ingin saya membuktikan bahwa LocalDate.toString (pola string) TIDAK ada? Harap berikan referensi ke metode itu jika memang ada - Saya belum dapat menemukannya di javadocs apa pun. Adapun solusinya, pertanyaan ini sudah memiliki itu.
Edward

@Edward, Sepertinya Anda kesulitan menemukannya. Memperbarui jawaban saya.
Inoy

Joda Time bukan "built-in". OP tampaknya menggunakan java.time.LocalDate, bukan joda.time
Edward

-11

Cara yang cukup bagus untuk melakukan ini adalah dengan menggunakan SimpleDateFormatsaya akan menunjukkan kepada Anda caranya:

SimpleDateFormat sdf = new SimpleDateFormat("d MMMM YYYY");
Date d = new Date();
sdf.format(d);

Saya melihat bahwa Anda memiliki tanggal dalam variabel:

sdf.format(variable_name);

Bersulang.


3
OP ingin mencetak konten LocalDateinstance dalam format tertentu. Bagaimana bisa SimpleDateFormatmembantunya di sini?
Tom
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.