2011-08-01 6 views
2

J'essaie de récupérer le jour localisé pour un horodatage donné. Mon code est quelque chose comme çaAndroid Time.format ("% a") indiquant un jour de la semaine incorrect

String timestamp = "2011-08-01T15:55:03.000+02:00"; 
Time time = new Time(); 
time.parse3339(timestamp); 
// In strftime format "%a" should be the abbreviated weekday name 
// according to the current locale. 
String result = time.format("%a") 

Depuis le 1 août 2011 est un lundi la chaîne de résultat devrait être « Mon » (en supposant locale en anglais), mais il est « Sun »!

+0

Est-il possible que le parse3339 a échoué? Pourriez-vous voir un «zéro»? Essayez de régler la date en avance et voir si c'est mon. – ethrbunny

Répondre

5

time.normalize() doit être appelé, sinon les valeurs de WeekDay, yearDay, isdst et gmtoff seront tous 0.

Le code est correct:

time.parse3339(timestamp); 
time.normalize(false); 
String localizedDayOfWeek = time.format("%a") 

Merci à Femi, qui m'a mis sur la bonne voie en faisant remarquer que, dans certains cas, le temps peut être converti en UTC par time.parse3339().

+0

Merci cela m'a juste aidé. Tout revenait dimanche. Maintenant, si je normalise après chaque changement de date cela fonctionne –

1

Vous devriez vérifier la valeur de retour: de la javadoc:

Returns true if the resulting time value is in UTC time.

Si l'analyse est revenu une heure UTC qui tombe le dimanche vous pourriez obtenir cela. Je ne sais pas comment cela serait possible étant donné votre exemple ci-dessus, mais je ne peux pas penser à autre chose qui ferait cela.

0

Avez-vous vraiment besoin d'analyser l'horodatage donné, ou souhaitez-vous obtenir la date maintenant? Dans le cas de ce dernier, l'utilisation:

Time time = new Time(); 
time.setToNow(); 
String result = time.format("%a"); 
Questions connexes