วิธีการจัดรูปแบบ LocalDate เป็นสตริง?


156

ฉันมีตัวแปร LocalDate ที่เรียกว่าวันที่เมื่อฉันพิมพ์มันจะแสดง 1988-05-05 ฉันจำเป็นต้องแปลงค่านี้ให้พิมพ์เป็นวันที่ 05.May 1988 วิธีการทำเช่นนี้?


3
ดูคลาสDateTimeFormatter มันยังมีตัวอย่างของวิธีการแปลงจากStrings
azurefrog

2
คุณควรแสดงรหัสสิ่งที่คุณได้ลองมาแล้วและสิ่งที่ไม่ได้ผลเพื่อให้ผู้คนสามารถช่วยคุณได้
bvidal

ฉันพยายามทำเช่นนั้น แต่เพราะสิ่งที่น่ารำคาญ "มันไม่เป็นไปตามมาตรฐานคุณภาพของเรา" ในที่สุดฉันก็ยอมแพ้มันใช้เวลา 15 นาทีในการโพสต์สิ่งนี้เพราะฉันต้องแก้ไข "i" กับ "I"
Jasko

คำตอบ:


306

SimpleDateFormat จะไม่ทำงานหากเขาเริ่มต้นด้วย LocalDate ซึ่งเป็นของใหม่ใน Java 8 จากสิ่งที่ฉันเห็นคุณจะต้องใช้ DateTimeFormatter, http://docs.oracle.com/javase/8/docs/api/java/ เวลา

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

ควรพิมพ์วันที่ 5 พฤษภาคม 1988 หากต้องการรับช่วงเวลาหลังจากวันและก่อนเดือนคุณอาจต้องใช้ "dd'.LLLL yyyy"


4
ขอบคุณมากสิ่งนี้ช่วยได้ แต่มันไม่ได้ทำงานกับ 'LLLL' เพื่อแสดงชื่อของเดือน แต่ด้วย 'MMMM' ฉันพบสิ่งแปลกประหลาดนี้ตั้งแต่ในเอกสารอธิบายว่าเป็นอย่างอื่น แต่ขอขอบคุณที่ช่วยฉันอีกครั้ง .
Jasko

2
ตอนนี้ localDate.format (ตัวจัดรูปแบบ); ไม่ทำงานเลย
EngineSense

JDK รุ่นใดที่ใช้ @ProgrammersBlock ของคุณ
Lova Chittumuri


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

คำตอบข้างต้นแสดงให้เห็นในวันนี้


ofPatterns ต้องการ android O
Mahdi

0

ด้วยความช่วยเหลือของโพสต์ ProgrammersBlock ฉันมาด้วยนี้ ความต้องการของฉันแตกต่างกันเล็กน้อย ฉันต้องการใช้สตริงและส่งคืนเป็นวัตถุ LocalDate ฉันส่งรหัสที่ใช้ปฏิทินรุ่นเก่าและ SimpleDateFormat ฉันต้องการทำให้เป็นปัจจุบันมากขึ้นเล็กน้อย นี่คือสิ่งที่ฉันมาด้วย

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

}

หวังว่านี่จะช่วยให้ใครบางคนถ้าใครเห็นวิธีที่ดีกว่าในการทำงานนี้โปรดเพิ่มการป้อนข้อมูลของคุณ


ฉันเห็นวิธีที่ดีกว่า: เพียงแค่LocalDate.parse(rawDate)! String.formatกำลังถูกใช้งานในรูปแบบที่ไม่ถูกต้องที่นี่จริง ๆ แล้วแค่ส่งคืนสายแรก; DateTimeFormatterไม่ได้ถูกนำมาใช้ในทุก parseเป็นstaticวิธีการของLocalDate; formattedDateคือไม่ได้วันที่จัดรูปแบบไม่ได้String(ตามที่ร้องขอในคำถาม)
user85421

0

มีวิธีการจัดรูปแบบ LocalDate ในตัวสำหรับjoda lib

import org.joda.time.LocalDate;

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

ในกรณีที่คุณยังไม่มี - เพิ่มสิ่งนี้ลงใน build.gradle:

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

การเข้ารหัสมีความสุข! :)


1
ไม่เป็นไปตาม javadoc
Edward

@ เอ็ดเวิร์ดถ้าไม่ได้โปรดพิสูจน์มันและให้ทางออกที่คุณคิดว่าดีกว่า
Inoy

1
คุณต้องการให้ฉันพิสูจน์ว่า LocalDate.toString (รูปแบบสตริง) ไม่มีอยู่? โปรดให้การอ้างอิงถึงวิธีการนั้นหากมันมีอยู่ - ฉันไม่สามารถค้นหาได้ใน javadocs ใด ๆ สำหรับวิธีแก้ปัญหาคำถามนี้มีอยู่แล้วว่า
Edward

@Edward ดูเหมือนว่าคุณกำลังมีปัญหาในการค้นหา อัปเดตคำตอบของฉัน
Inoy

Joda Time ไม่ใช่ "built-in" OP ดูเหมือนว่าจะใช้ java.time.LocalDate ไม่ใช่ joda.time
Edward

-11

วิธีที่ดีในการทำเช่นนี้คือการใช้SimpleDateFormatฉันจะแสดงวิธี:

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

ฉันเห็นว่าคุณมีวันที่ในตัวแปร:

sdf.format(variable_name);

ไชโย


3
OP ต้องการพิมพ์เนื้อหาของLocalDateอินสแตนซ์ในรูปแบบเฉพาะ จะSimpleDateFormatช่วยเขาได้อย่างไรที่นี่
Tom
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.