Як відформатувати LocalDate до рядка?


156

У мене є змінна LocalDate під назвою дата, коли я друкую її відображається 1988-05-05 мені потрібно перетворити це, щоб воно було надруковано як 05. травня 1988.Як це зробити?


3
Погляньте на клас DateTimeFormatter . У ньому навіть є приклади, як перетворитись на та з Strings.
azurefrog

2
Ви повинні показати якийсь код, що ви намагалися досі, а що не працює, щоб люди могли вам допомогти.
bvidal

Я спробував це зробити, але через це надокучливо "воно не відповідає нашим стандартам якості", я нарешті відмовився, мені знадобилося 15 хвилин, щоб опублікувати це, тому що мені довелося виправити "я" з "я".
Ясько

Відповіді:


306

SimpleDateFormat не працюватиме, якщо він починає з LocalDate, який є новим на Java 8. З того, що я бачу, вам доведеться використовувати DateTimeFormatter, http://docs.oracle.com/javase/8/docs/api/java/ час / формат / DateTimeFormatter.html .

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

Це має бути надруковано 05 травня 1988 р. Щоб отримати період після дня і до місяця, можливо, вам доведеться використовувати "dd'.LLLL yyyy"


4
Дуже дякую, це допомагає, але це не працювало з "LLLL", щоб показувати назву місяця, але з "MMMM" я вважав це дивним, оскільки навіть у документації написано інакше. Але ще раз дякую за допомогу мені .
Ясько

2
Тепер localDate.format (формат); зовсім не працює
EngineSense

яка версія JDK використовує ваш @ProgrammersBlock
Lova Chittumuri

29

Може бути коротким як:

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

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

Наведена відповідь показує це на сьогодні


ofPaterns потребує андроїд O
Махді

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, якщо це не так, будь ласка, доведіть це та надайте рішення, яке, на вашу думку, є кращим.
Іной

1
Ви хочете, щоб я довів, що LocalDate.toString (String pattern) НЕ існує? Будь ласка, вкажіть посилання на цей метод, якщо він існує - я не зміг його знайти в жодному javadocs. Щодо рішення, це питання вже має таке.
Едвард

@Edward, схоже, вам важко це знайти. Оновлено мою відповідь.
Іной

Час Джода не "вбудований". Здається, OP використовує java.time.LocalDate, а не joda.time
Едвард

-11

Досить приємний спосіб зробити це - скористатись, SimpleDateFormatя покажу вам, як:

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

Я бачу, що у вас є дата в змінній:

sdf.format(variable_name);

Ура.


3
OP хоче надрукувати вміст LocalDateекземпляра у певному форматі. Як міг SimpleDateFormatйому тут допомогти?
Том
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.