2015-02-19 17 views
5

Ho la seguente stringa: "05 X 02". Come posso convertirlo fino ad oggi? Non voglio convertirlo in stringa "05 10 02" e quindi fino ad oggi. È possibile?Converti stringa per data - mese romano

Grazie per l'aiuto.

Finora ho cercato uso

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd M/L yy"); 

Ma non funziona. Prova anche a usare DateTimeFormatterBuilder, ma qui sono completamente perso.

+0

Sì, questo è possibile. Si prega di mostrare ciò che hai provato finora e di spiegare quale sia il problema specifico. Inoltre, come stai procedendo bypassando un formato che 'Date' può effettivamente leggere? Qual è la ragione di questo requisito apparentemente arbitrario? – tnw

+5

Che analisi stai cercando di usare - 'SimpleDateFormat'? Hai provato 'SimpleDateFormat.setDateFormatSymbols' e hai fornito una serie di simboli di formato in cui i nomi dei mesi sono' I', 'II' etc? –

risposta

10

È possibile modificare i simboli di formato di default di avere i numeri per mesi romaniche

DateFormatSymbols symbols = DateFormatSymbols.getInstance(); 

final String[] romanMonths = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII"}; 
symbols.setMonths(romanMonths); 

SimpleDateFormat formatter = new SimpleDateFormat("dd MMMM yy", symbols); 

System.out.println("My date " + formatter.parse("05 X 02")); 

Here è un bel tutorial su come avere i simboli formattazione personalizzata.

Si può scegliere di cambiare entrambi i brevi mesi tramite setShortMonths() o mesi interi tramite setMonths()

UPDATE: Ecco una versione con DateTimeFormatterBuilder da JDK8

static final ImmutableMap<Long, String> ROMAN_MONTHS = ImmutableMap.<Long, String>builder() 
       .put(1L, "I").put(2L, "II").put(3L, "III").put(4L, "IV").put(5L, "V") 
       .put(6L, "VI").put(7L, "VII").put(8L, "VIII").put(9L, "IX").put(10L, "X") 
       .put(11L, "XI").put(12L, "XII").build(); 

DateTimeFormatter formatter = new DateTimeFormatterBuilder() 
        .appendValue(ChronoField.DAY_OF_MONTH, 1, 2, SignStyle.NORMAL) 
        .appendLiteral(' ') 
        .appendText(ChronoField.MONTH_OF_YEAR, ROMAN_MONTHS) 
        .appendLiteral(' ') 
        .appendValue(ChronoField.YEAR, 4) 
        .toFormatter(); 

System.out.println("My date " + formatter.parse("5 X 2012")); 
+0

Impressionante è ciò di cui ho bisogno, grazie mille. – Pulkownik

+0

Ho aggiunto anche un aggiornamento su come farlo con java 8 btw, date un'occhiata. – vtor

+0

Grazie per l'aggiornamento, ma sfortunatamente devo ancora usare java.util.date. – Pulkownik