2012-03-26 7 views
53

Je cet extrait de code:Comment convertir une chaîne en date en utilisant SimpleDateFormat?

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

Quand je lance cela, je reçois cela comme la sortie:

Sun Jan 16 00:10:00 IST 2011 

Je pensais:

Tue Aug 16 "Whatever Time" IST 2011 

Je veux dire que je suis ne pas avoir le mois comme prévu. Quelle est l'erreur?

Répondre

84

Essayez ceci:

new SimpleDateFormat("MM/dd/yyyy") 
  • MM est "mois" (non mm)
  • dd est "jour" (non DD)

Il est dans le javadoc for SimpleDateFormat


Pour votre information, la raison pour laquelle le format est encore un format de date valide est que:

  • mm est "minutes"
  • DD est- "jour de l'année"

, vous n'avez pas besoin le casting de Date ... déjà est un Date (ou elle explose):

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

Sortie:

Tue Aug 16 00:00:00 EST 2011 

Voila!

+0

Pas de chance .. :(Son toujours Jan .. Peu importe quelle valeur je donne à MM il affiche toujours moi Jan. La date et l'année fonctionnent bien .. –

+2

C'est vrai, m = minues, M = mois – WhyNotHugo

+0

@Bohemian: Si j'utilise le même format (MM/jj/aaaa) avec une mauvaise date (ie 02/40/2013), le J'obtiens le 12 mars 2013. Pourquoi y a-t-il un moyen d'empêcher ce comportement? – 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

Utilisez la fonction ci-dessous

/** 
    * 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)); 
    } 

Exemple d'utilisation est le suivant:

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

Très simple exemple est.

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 - min M - Mois

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

Merci pour la table, vraiment utile de l'avoir sur cette page –

2

vous pouvez résoudre le problème beaucoup plus simple comme d'abord convertir la chaîne donnée à l'objet de la date par exemple:

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

Cette morceau de code permet de convertir en avant et en arrière

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

retournera un format basé sur la langue du périphérique. Notez que getBestDateTimePattern() renvoie "la meilleure forme localisée possible du squelette donné pour la locale donnée"

Questions connexes