Question

Android 2.3 a été récemment publié hier soir. Alors, naturellement, j'ai essayé mon application sur elle et trouvé qu'il y avait ce jour le formatage problème. Je l'ai remarqué la DateFormatter produit différents formats. Donc faire dans un simple programme Java:

((SimpleDateFormat)DateFormat.getDateTimeInstance(DateFormat.LONG, 
    DateFormat.LONG)).format(new Date());

La sortie est

  

7 Décembre, 2010 11:49:40 EST

Faites la même chose dans un émulateur Android et vous obtenez

  

7 Décembre, 2010 11:42:50 GMT-05: 00

Notez un fuseau horaire différent. Quelqu'un at-RAN pour cette question? Y at-il une autre formatter je peux utiliser qui ne dépend pas de la mise en œuvre de Java?

EDIT: Ok, donc voici plus en détail les raisons pour lesquelles je pense que cela est cassé:

En utilisant ce code:

private final DateFormat format = 
    new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");

J'ai essayé d'analyser une date, mais l'erreur suivante est générée:

12-07 12:55:49.556: ERROR/DateDeserializer(847): Error when parsing date
    java.text.ParseException: Unparseable date: "Mon, 06 Dec 2010 17:13:35 EST"
    at java.text.DateFormat.parse(DateFormat.java:626)
    at com.currency.mobile.client.DateDeserializer
        .deserialize(DateDeserializer.java:31)
    at com.currency.mobile.client.DateDeserializer
        .deserialize(DateDeserializer.java:19)
    at org.codehaus.jackson.map.deser.SettableBeanProperty
        .deserialize(SettableBeanProperty.java:149)
Était-ce utile?

La solution

Il n'y a rien de mal à la sortie. Vous créez un DateFormat -instance qui dépend de la valeur par défaut Locale . Il est pas rare que sur des machines différentes, différentes java-installations par défaut et ainsi varier Locale la sortie des opérations dépendant des paramètres locaux. Dans ce cas, le défaut TimeZone est différent, mais les deux sorties dans votre question représentent la même date, imprimée avec le même format chaîne MMMMM d, yyyy hh:mm:ss a z.

Mise à jour: parse () dans Android 2.3 fonctionnera avec TimeZones comme GMT+xxxx etc, mais il ne reconnaît pas EST par exemple comme TimeZone valable pour l'analyse syntaxique. Android sait EST si vous utilisez TimeZone.getTimeZone("EST").

MAJ2:

ID de fuseau horaire à trois lettres "EST", " TVH » et « MST » sont déconseillés. ne les utilisez pas.

Autres conseils

Les deux sont même TimeZone juste différent représentation

On dirait un soutien pour le modèle "EEE MMM dd HH: mm: ss zzz yyyy". Est également cassé

Evguéni

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top