2011-05-29 3 views
0

J'ai la chaîne suivante "29/05/2012 12:11 PM" je veux ajouter cette valeur à un DateFieldComment définir la valeur DateField à l'aide d'une chaîne contenant la date et l'heure?

je l'ai fait comme ceci:

String dateTime = "29/05/2012 12:11 PM"; 
long initialDateTime = System.currentTimeMillis(); 
SimpleDateFormat SDF_DateTime = new SimpleDateFormat("dd/MM/yyyy hh:mm aa"); 
DateField DF_DateTime = new DateField("Time: ", initialDateTime , SDF_DateTime, Field.FIELD_LEFT | DrawStyle.LEFT | Field.FOCUSABLE); 
DF_DateTime.setTimeZone(TimeZone.getDefault()); 
DF_DateTime.setDate(stringToDate(dateTime)); 
add(DF_DateTime); 

public Date stringToDate(String s) 
{ 
    Calendar c = Calendar.getInstance(TimeZone.getDefault()); 
    c.set(Calendar.DAY_OF_MONTH, Integer.parseInt(s.substring(0, 2))); 
    c.set(Calendar.MONTH, Integer.parseInt(s.substring(3, 5)) - 1); 
    c.set(Calendar.YEAR, Integer.parseInt(s.substring(6, 10))); 
    c.set(Calendar.HOUR, Integer.parseInt(s.substring(11, 13))); 
    c.set(Calendar.MINUTE, Integer.parseInt(s.substring(14, 16))); 
    c.set(Calendar.SECOND, 0); 
    c.set(Calendar.AM_PM, s.substring(17, 19).toLowerCase().equals("am") ? Calendar.AM : Calendar.PM); 
    return c.getTime(); 
} 


Mais le champ montre: "/05/2012 12:11 AM"
i lutôt de "/05/2012 12:11 PM"

S'il est utile de savoir, mon appareil est défini dans les options pour le fuseau horaire suivant: "Dublin, Londres (GMT)"

Y a-t-il une interprétation logique de ce qui se passe?

Répondre

0

J'ai trouvé la solution, il est ici pour ceux qui sont intéressés:

c.set(Calendar.HOUR, Integer.parseInt(s.substring(11, 13)) % 12); 

Parce que dans la javadoc pour Calendar.HOUR il est précisé que:

HEURE est utilisé pour la 12 heure (0 - 11). Midi et minuit sont représentés par 0, et non par 12

Questions connexes