2012-03-26 12 views
53

Ho questo frammento di codice:Come convertire una stringa in una data utilizzando SimpleDateFormat?

DateFormat formatter1; 
formatter1 = new SimpleDateFormat("mm/DD/yyyy"); 
System.out.println((Date)formatter1.parse("08/16/2011")); 

Quando eseguo questo, ho questa come l'uscita:

Sun Jan 16 00:10:00 IST 2011 

mi aspettavo:

Tue Aug 16 "Whatever Time" IST 2011 

intendo dire che sono non ottenere il mese come previsto. Qual è l'errore?

risposta

84

Prova questo:

new SimpleDateFormat("MM/dd/yyyy") 
  • MM è "mese" (non mm)
  • dd è "giorno" (non DD)

E 'tutto nel javadoc for SimpleDateFormat


Cordiali saluti, il motivo per il formato è ancora un formato di data valida è che:

  • mm è "minuti"
  • DD è "giorno dell'anno"

Inoltre, non è necessario il cast per Date ... è già è un Date (o esplode):

public static void main(String[] args) throws ParseException { 
    System.out.println(new SimpleDateFormat("MM/dd/yyyy").parse("08/16/2011")); 
} 

Uscita:

Tue Aug 16 00:00:00 EST 2011 

Voilà!

+0

Nessuna fortuna .. :(È ancora Jan .. Non importa quale valore offro a MM, mi mostra sempre Jan. Data e anno funzionano bene .. –

+2

Esatto; m = minuti, M = mesi. – WhyNotHugo

+0

@Bohemian: se uso lo stesso formato (MM/gg/aaaa) con una data errata (ovvero il 02/40/2013), il l'analisi non ha esito negativo. Otterrò il 12 marzo 2013. Perché esiste un modo per prevenire questo comportamento? – Sefran2

4
String newstr = "08/16/2011"; 
SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy"); 
SimpleDateFormat format = new SimpleDateFormat("EE MMM dd hh:mm:ss z yyyy"); 
Calendar c = Calendar.getInstance(); 
c.setTime(format1.parse(newstr)); 
System.out.println(format.format(c.getTime())); 
10

utilizzare la funzione di sotto

/** 
    * Format a time from a given format to given target format 
    * 
    * @param inputFormat 
    * @param inputTimeStamp 
    * @param outputFormat 
    * @return 
    * @throws ParseException 
    */ 
    private static String TimeStampConverter(final String inputFormat, 
      String inputTimeStamp, final String outputFormat) 
      throws ParseException { 
     return new SimpleDateFormat(outputFormat).format(new SimpleDateFormat(
       inputFormat).parse(inputTimeStamp)); 
    } 

Sample dell'uso è la seguente:

try { 
     String inputTimeStamp = "08/16/2011"; 

     final String inputFormat = "MM/dd/yyyy"; 
     final String outputFormat = "EEE MMM dd HH:mm:ss z yyyy"; 

     System.out.println(TimeStampConverter(inputFormat, inputTimeStamp, 
       outputFormat)); 

    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
4

esempio molto semplice è.

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy"); 
       Date date = new Date(); 
       Date date1 = new Date(); 
      try { 
       System.out.println("Date1: "+date1); 
       System.out.println("date" + date); 

       date = simpleDateFormat.parse("01-01-2013"); 
       date1 = simpleDateFormat.parse("06-15-2013"); 

       System.out.println("Date1 is:"+date1); 
       System.out.println("date" + date); 

      } catch (Exception e) { 
       System.out.println(e.getMessage()); 
      } 
37

m - M - Mesi

Letter Date or Time Component Presentation Examples 
G  Era designator   Text    AD 
y  Year     Year    1996; 96 
M  Month in year   Month    July; Jul; 07 
w  Week in year   Number    27 
W  Week in month   Number    2 
D  Day in year    Number    189 
d  Day in month   Number    10 
F  Day of week in month Number    2 
E  Day in week    Text    Tuesday; Tue 
a  Am/pm marker   Text    PM 
H  Hour in day (0-23)  Number    0 
k  Hour in day (1-24)  Number    24 
K  Hour in am/pm (0-11) Number    0 
h  Hour in am/pm (1-12) Number    12 
m  Minute in hour   Number    30 
s  Second in minute  Number    55 
S  Millisecond    Number    978 
z  Time zone    General time zone Pacific Standard Time; PST; GMT-08:00 
Z  Time zone    RFC 822 time zone -0800 
+2

Grazie per il tavolo, davvero utile averlo su questa pagina –

2

è possibile risolvere il problema molto semplice come prima convertire la stringa data alla oggetto data esempio:

java.util.Date date1 = new Date("11/19/2015"); 
SimpleDateFormat formatter = new SimpleDateFormat("MMM dd yyyy HH:mma"); 
String format = formatter.format(date); 
System.out.println(format); 
2

Questo pezzo di codice aiuta a convertire avanti e indietro

System.out.println("Date: "+ String.valueOf(new Date())); 
    SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    String stringdate = dt.format(new Date()); 
    System.out.println("String.valueOf(date): "+stringdate); 

    try { 
    Date date = dt.parse(stringdate); 
    System.out.println("parse date: "+ String.valueOf(date)); 
    } catch (ParseException e) { 
    e.printStackTrace(); 
    } 
0
String localFormat = android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "EEEE MMMM d"); 
return new SimpleDateFormat(localFormat, Locale.getDefault()).format(localMidnight); 

restituirà un formato basato sulla lingua del dispositivo. Nota che getBestDateTimePattern() restituisce "la migliore forma localizzata dello scheletro dato per le impostazioni locali"

Problemi correlati