2015-04-08 8 views
6

Sto cercando di analizzare una stringa che assomiglia:stringhe mese di analisi a base zero in Java

2015, 2, 31, 17, 0, 1 

così ho pensato che userò

SimpleDateFormat("yyyy, MM, dd, hh, mm, ss") 

ma assume i mesi sono 1 -basato. In questo caso il mese (2) è marzo. Come posso dire a SimpleDateFormat o a qualsiasi altra classe di analizzare con mesi a base zero?

+0

c'è una ragione non si può semplicemente aggiungere uno al mese immediatamente prima di formattare con il formato della data? Sembrerebbe che risolverebbe il problema. –

+0

Non ci sono segnaposti per il mese a 0 in SimpleDateFormat, quindi è necessario modificare il mese in modo esplicito o creare una data utilizzando Calendar. –

+2

@DavisBroda: Come ti aspetti che funzioni con l'esempio fornito, che verrà analizzato come "31 febbraio" (e quindi regolato o non in grado di analizzare). –

risposta

4

Uso Calendar:

String[] yourString = "2015, 2, 31, 17, 0, 1".split(","); 

Calendar c = new GregorianCalendar(); 
c.set(Calendar.YEAR, Integer.valueOf(yourString[0])); 
c.set(Calendar.MONTH, Integer.valueOf(yourString[1])); 
c.set(Calendar.DAY_OF_MONTH, Integer.valueOf(yourString[2])); 
c.set(Calendar.HOUR_OF_DAY, Integer.valueOf(yourString[3])); 
c.set(Calendar.MINUTE, Integer.valueOf(yourString[4])); 
c.set(Calendar.SECOND, Integer.valueOf(yourString[5])); 
+1

Quale sovraccarico di 'set' è quello che usa? (Volete che 'Integer.parseInt' chiami lì ...) –

+0

Sì, ho pensato che avrei potuto" analizzare "la stringa manualmente, ma avevo sperato che ci sarebbe stato un modo migliore =). – JonatanSJ

+0

@JonSkeet totalmente d'accordo ... risolto ... grazie per la cattura! –