Correlato alla mia domanda here - Come ottengo la stringa originale pattern
data DateTimeFormatter
?Ottieni lo schema originale String dato con un DateTimeFormatter JDK 8?
risposta
E 'stato chiesto on the mailing list e la risposta è che non è possibile perché il modello originale non viene mantenuto.
Lo stesso thread suggerisce di utilizzare un DateTimeFormatterBuilder
che contiene le informazioni.
Immagino che 'DateTimeFormatterBuilder' permetta di creare un formato localizzato, ma non fornisce esattamente il formato esatto usato per costruire l'oggetto' DateTimeFormatter', se non sbaglio. –
@RohitJain Probabilmente è il caso - la javadoc non promette di restituire il modello originale. – assylias
Potrebbe non essere una risposta diretta alla tua domanda ma potrebbe essere d'aiuto.
se si conoscono i parametri di come il formattatore è stato costruito è possibile chiamare il metodo statico:
DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle dateStyle, FormatStyle timeStyle, Chronology chrono, Locale locale)
questo vi darà il modello come una stringa.
O più semplicemente: '((SimpleDateFormat) DateFormat.getDateInstance (DateFormat.SHORT, Locale.FRENCH)). ToPattern()' – qwertzguy
Non una soluzione semplice o elegante, ma utilizzando i risultati del metodo DateTimeFormatter
.toString()
, potrebbe essere possibile eseguire il rollover del proprio codice che analizza la stringa risultante e ricostruisce il modello originale.
Alcuni codice che stampa alcuni .toString()
risultati per i vari modelli:
java.time.format.DateTimeFormatter variousFormatPatterns =
java.time.format.DateTimeFormatter.ofPattern("yy MM dd");
System.out.println("Test 1: " + variousFormatPatterns.toString());
variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("yy-MM-dd");
System.out.println("\nTest 2: " + variousFormatPatterns.toString());
variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("yyMMdd");
System.out.println("\nTest 3: " + variousFormatPatterns.toString());
variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
System.out.println("\nTest 4: " + variousFormatPatterns.toString());
Risultati (si noti la conservazione dei caratteri spazio/trattino/slash/delimitatore due punti):
Test 1: ReducedValue (YearOfEra, 2,2,2000-01-01) '' Value (MonthOfYear, 2) '' Value (DayOfMonth, 2)
Test 2: ReducedValue (YearOfEra, 2,2,2000-01-01) '-' Valore (MonthOfYear, 2) '-' Valore (DayOfMonth, 2)
Test 3: ReducedValue (YearOfEra, 2,2,2000-01-01) Valore (MonthOfYear, 2) Valore (DayOfMonth, 2)
Test 4: Valore (MonthOfYear, 2) '/' Valore (DayOfMonth, 2) '/' Valore (YearOfEra, 4,19, EXCEEDS_PAD) ' 'Valore (HourOfDay, 2)': 'Valore (MinuteOfHour, 2)':' Valore (SecondOfMinute, 2)
L'implementazione di questo approccio richiederebbe lo studio del codice in java.time.format.DateTimeFormatterBuilder
. Il metodo JavaDoc per il metodo appendPattern(String pattern)
sembra particolarmente utile. Potresti essere in grado di prendere alcune scorciatoie se sai che stai lavorando con pochi tipi di modelli.
Facendo una rapida occhiata attraverso il codice DateTimeFormatterBuilder
, ci sarebbe probabilmente un rischio basandosi su questo tipo di soluzione, come le stringhe come Value
, ReducedValue
, Fraction
, ecc potrebbero cambiare senza preavviso nelle future versioni di Java.
non @KevinWorkman Probabile un duplicato, in quanto questo è sulla classe DateTimeFormatter JDK 8, non la classe tempo Joda – bowmore
@bowmore Il JDK 8 Classi DateTimeFormatter era basato fuori la classe JodaTime DateTimeFormatter. Le risposte a questa domanda sono le risposte a questa domanda. –
@KevinWorkman Quello che ha ispirato l'altro, non li rende uguali. Il loro comportamento è diverso in vari modi. Tuttavia, mentre le risposte possono essere le stesse, la domanda non è un duplicato, poiché chi pone la domanda potrebbe ignorare la relazione tra i due. – bowmore