Làm cách nào để định dạng LocalDate thành chuỗi?


156

Tôi có một biến LocalDate được gọi là ngày, khi tôi in nó hiển thị 1988-05-05 Tôi cần chuyển đổi nó để được in là 05.May 1988. Làm thế nào để làm điều này?


3
Hãy xem lớp DateTimeFormatter . Nó thậm chí còn có các ví dụ về cách chuyển đổi sang và từ Strings.
azurefrog

2
Bạn nên hiển thị một số mã, những gì bạn đã thử cho đến nay và những gì không hoạt động để mọi người có thể giúp bạn.
bvidal

Tôi đã cố gắng để làm điều đó nhưng vì điều này "nó không đáp ứng các tiêu chuẩn chất lượng của chúng tôi" mà cuối cùng tôi đã từ bỏ, tôi đã mất 15 phút chỉ để đăng bài này vì tôi phải sửa "i" bằng "tôi".
Jasko

Câu trả lời:


306

SimpleDateFormat sẽ không hoạt động nếu anh ấy bắt đầu với LocalDate mới trong Java 8. Từ những gì tôi có thể thấy, bạn sẽ phải sử dụng DateTimeFormatter, http://docs.oracle.com/javase/8/docs/api/java/ thời gian / định dạng / DateTimeFormatter.html .

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

Điều đó sẽ in ngày 05 tháng 5 năm 1988. Để có được khoảng thời gian sau ngày và trước tháng, bạn có thể phải sử dụng "dd'.LLLL yyyy"


4
Cảm ơn bạn rất nhiều, điều này có ích, nhưng nó không hoạt động với 'LLLL' để hiển thị tên của tháng nhưng với 'MMMM' tôi thấy điều này lạ vì ngay cả trong tài liệu nó nói khác. Nhưng một lần nữa cảm ơn bạn đã giúp tôi .
Jasko

2
Bây giờ localDate.format (định dạng); hoàn toàn không hoạt động
EngineSense

Phiên bản nào JDK của bạn bằng cách sử dụng @ProgrammersBlock
Lova Chittumuri

29

Có thể ngắn gọn là:

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

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

Câu trả lời trên cho thấy nó cho ngày hôm nay


ofPotypes cần android O
Mahdi

0

Với sự giúp đỡ của các bài viết của Lập trình viên, tôi đã nghĩ ra điều này. Nhu cầu của tôi hơi khác nhau. Tôi cần lấy một chuỗi và trả về nó dưới dạng đối tượng LocalDate. Tôi đã được trao mã đang sử dụng Lịch cũ và SimpleDateFormat. Tôi muốn làm cho nó một chút hiện tại. Đây là những gì tôi đã đưa ra.

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

}

Hy vọng rằng điều này sẽ giúp được ai đó, nếu bất cứ ai thấy cách tốt hơn để thực hiện nhiệm vụ này, vui lòng thêm đầu vào của bạn.


Tôi thấy một cách tốt hơn: chỉ LocalDate.parse(rawDate)!String.formatđang được sử dụng ở dạng sai hoàn toàn ở đây, thực sự chỉ trả về chuỗi đầu tiên; cái DateTimeFormatternày không được sử dụng chút nào; parselà một staticphương pháp của LocalDate; formattedDatekhông một ngày định dạng, thậm chí không một String(theo yêu cầu trong câu hỏi)
user85421

0

Có một cách tích hợp để định dạng LocalDate cho joda lib

import org.joda.time.LocalDate;

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

Trong trường hợp bạn chưa có nó - hãy thêm cái này vào build.gradle:

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

Chúc mừng mã hóa! :)


1
Không theo javadoc.
Edward

@Edward, nếu không, vui lòng chứng minh và cung cấp giải pháp mà bạn cho là tốt hơn.
Inoy

1
bạn muốn tôi chứng minh rằng LocalDate.toString (mẫu chuỗi) KHÔNG tồn tại? Vui lòng cung cấp một tham chiếu đến phương thức đó nếu nó tồn tại - Tôi chưa thể tìm thấy nó trong bất kỳ javadocs nào. Đối với một giải pháp, câu hỏi này đã có điều đó.
Edward

@Edward, Có vẻ như bạn đang gặp khó khăn trong việc tìm kiếm nó. Cập nhật câu trả lời của tôi.
Inoy

Joda Time không "tích hợp". OP dường như đang sử dụng java.time.LocalDate, không phải joda.time
Edward

-11

Một cách khá hay để làm điều này là sử dụng SimpleDateFormat Tôi sẽ chỉ cho bạn cách:

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

Tôi thấy rằng bạn có ngày trong một biến:

sdf.format(variable_name);

Chúc mừng.


3
OP muốn in nội dung của một LocalDatethể hiện theo một định dạng cụ thể. Làm thế nào có thể SimpleDateFormatgiúp anh ta ở đây?
Tom
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.