Jak sformatować LocalDate na ciąg?


156

Mam zmienną LocalDate o nazwie date, kiedy drukuję, wyświetla 1988-05-05 Muszę przekonwertować to na 05. maj 1988.Jak to zrobić?


3
Spójrz na klasę DateTimeFormatter . Zawiera nawet przykłady konwersji do iz Strings.
azurefrog

2
Powinieneś pokazać kod, co do tej pory wypróbowałeś, a co nie działa, aby ludzie mogli ci pomóc.
bvidal

Próbowałem to zrobić, ale z powodu tej irytującej rzeczy „nie spełnia naszych standardów jakości” w końcu zrezygnowałem, opublikowanie tego zajęło mi 15 minut, ponieważ musiałem poprawić „i” za pomocą „ja”.
Jasko

Odpowiedzi:


306

SimpleDateFormat nie zadziała, jeśli zaczyna od LocalDate, która jest nowością w Javie 8. Z tego co widzę, będziesz musiał użyć DateTimeFormatter, http://docs.oracle.com/javase/8/docs/api/java/ czas / format / DateTimeFormatter.html .

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

Powinien zostać wydrukowany 05 maja 1988. Aby uzyskać okres po dniu i przed miesiącem, może być konieczne użycie „dd'.LLLL yyyy”


4
Dziękuję bardzo, to pomaga, ale nie działało z 'LLLL', aby pokazać nazwę miesiąca, ale z 'MMMM' wydało mi się to dziwne, ponieważ nawet w dokumentacji jest inaczej. Ale jeszcze raz dziękuję za pomoc .
Jasko

2
Teraz localDate.format (program formatujący); w ogóle nie działa
EngineSense,

która wersja JDK jest używana przy użyciu @ProgrammersBlock
Lova Chittumuri

29

Może być krótki, jak:

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

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

Powyższa odpowiedź pokazuje to na dziś


ofPatterns potrzebuje Androida O
Mahdi

0

Przy pomocy postów ProgrammersBlock wymyśliłem to. Moje potrzeby były nieco inne. Musiałem pobrać ciąg i zwrócić go jako obiekt LocalDate. Otrzymałem kod, który korzystał ze starszego kalendarza i SimpleDateFormat. Chciałem, żeby było trochę bardziej aktualne. Oto, co wymyśliłem.

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

}

Miejmy nadzieję, że to komuś pomoże, jeśli ktoś widzi lepszy sposób wykonania tego zadania, dodaj swój wkład.


Widzę lepszy sposób: po prostu LocalDate.parse(rawDate)! String.formatjest tutaj używany w całkowicie niewłaściwej formie, w rzeczywistości zwraca tylko pierwszy ciąg; DateTimeFormatternie jest w ogóle wykorzystywane; parsejest staticmetodą LocalDate; formattedDateto nie jest sformatowana data, nawet String(zgodnie z wnioskiem, o którym mowa)
user85421

0

Istnieje wbudowany sposób formatowania LocalDate dla joda lib

import org.joda.time.LocalDate;

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

Jeśli jeszcze go nie masz - dodaj to do build.gradle:

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

Miłego kodowania! :)


1
Nie według javadoc.
Edward

@Edward, jeśli tak nie jest, udowodnij to i przedstaw rozwiązanie, które Twoim zdaniem jest lepsze.
Inoy,

1
chcesz, żebym udowodnił, że LocalDate.toString (wzorzec ciągu) NIE istnieje? Proszę podać odniesienie do tej metody, jeśli istnieje - nie udało mi się znaleźć jej w żadnym javadocs. Jeśli chodzi o rozwiązanie, to pytanie już je zawiera.
Edward

@ Edward, wygląda na to, że trudno ci go znaleźć. Zaktualizowałem moją odpowiedź.
Inoy

Joda Time nie jest „wbudowany”. OP wydaje się używać java.time.LocalDate, a nie joda.time
Edward

-11

Całkiem fajnym sposobem na zrobienie tego jest użycie SimpleDateFormat, a pokażę ci, jak:

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

Widzę, że masz datę w zmiennej:

sdf.format(variable_name);

Twoje zdrowie.


3
OP chce wydrukować zawartość LocalDateinstancji w określonym formacie. Jak mógł SimpleDateFormatmu tu pomóc?
Tom
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.