Come formattare LocalDate in stringa?


157

Ho una variabile LocalDate chiamata date, quando la stampa viene visualizzata il 05-05-2008 Ho bisogno di convertirla per stamparla come 05 maggio, 1988. Come si fa?


3
Dai un'occhiata alla classe DateTimeFormatter . Ha anche esempi di come convertire da e verso Strings.
Azurefrog,

2
Dovresti mostrare un po 'di codice, cosa hai provato finora e cosa non funziona in modo che le persone possano aiutarti.
Bvidal

Ho provato a farlo, ma a causa di questa fastidiosa cosa "non soddisfa i nostri standard di qualità" alla fine ho rinunciato, mi ci sono voluti 15 minuti solo per pubblicare questo perché ho dovuto correggere "i" con "I".
Jasko,

Risposte:


307

SimpleDateFormat non funzionerà se inizia con LocalDate che è nuovo in Java 8. Da quello che posso vedere, dovrai usare DateTimeFormatter, http://docs.oracle.com/javase/8/docs/api/java/ time / format / DateTimeFormatter.html .

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

Dovrebbe essere stampato il 05 maggio 1988. Per ottenere il periodo successivo al giorno e prima del mese, potrebbe essere necessario utilizzare "dd'.LLLL yyyy"


4
Grazie mille, questo aiuta, ma non ha funzionato con "LLLL" per mostrare il nome del mese, ma con "MMMM" l'ho trovato strano poiché anche nella documentazione dice diversamente, ma ancora una volta grazie per avermi aiutato .
Jasko,

2
Ora localDate.format (formatter); non funziona affatto
EngineSense il

quale versione JDK utilizza @ProgrammersBlock
Lova Chittumuri il

29

Potrebbe essere breve come:

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

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

La risposta sopra lo mostra per oggi


ofPatterns ha bisogno di Android O
Mahdi

0

Con l'aiuto dei post di ProgrammersBlock ho pensato a questo. Le mie esigenze erano leggermente diverse. Avevo bisogno di prendere una stringa e restituirla come oggetto LocalDate. Mi è stato consegnato il codice che utilizzava il calendario e SimpleDateFormat più vecchi. Volevo renderlo un po 'più attuale. Questo è quello che mi è venuto in mente.

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

}

Speriamo che questo possa aiutare qualcuno, se qualcuno vede un modo migliore di fare questo compito, per favore aggiungi il tuo contributo.


Vedo un modo migliore: solo LocalDate.parse(rawDate)! String.formatviene utilizzato in una forma totalmente errata qui, in realtà solo restituendo la prima stringa; il DateTimeFormatternon viene utilizzato affatto; parseè un staticmetodo di LocalDate; nonformattedDate è una data formattata, nemmeno un (come richiesto in questione)String
user85421

0

C'è un modo integrato per formattare LocalDate per joda lib

import org.joda.time.LocalDate;

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

Nel caso in cui non lo possiedi già, aggiungilo a build.gradle:

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

Buona programmazione! :)


1
Non secondo il javadoc.
Edward,

@Edward, in caso contrario, dimostralo e fornisci una soluzione che ritieni migliore.
Inoy,

1
vuoi che provi che LocalDate.toString (String pattern) NON esiste? Fornisci un riferimento a quel metodo se esiste - non sono stato in grado di trovarlo in nessun javadocs. Per quanto riguarda una soluzione, questa domanda ha già questo.
Edward,

@Edward, sembra che tu abbia difficoltà a trovarlo. Aggiornato la mia risposta.
Inoy,

Joda Time non è "incorporato". OP sembra usare java.time.LocalDate, non joda.time
Edward

-11

Un modo carino per farlo è usare SimpleDateFormatTi mostrerò come:

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

Vedo che hai la data in una variabile:

sdf.format(variable_name);

Saluti.


3
OP desidera stampare il contenuto di LocalDateun'istanza in un formato specifico. Come potrebbe SimpleDateFormataiutarlo qui?
Tom,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.