Question

Je reçois une date d'un serveur en millisecondes depuis le 1-1-1970. J'utilise ensuite le DateFormatter pour imprimer la date à l'écran. Cependant, Flex ajoute TIMEDIFFERSE et donc il affiche un moment différent de ce que j'ai obtenu du serveur. J'ai corrigé cela en modifiant la date avant l'impression en écran. Mais je pense que c'est une mauvaise solution car l'objet date ne tient pas la date correcte.

Est-ce que quelqu'un sait comment utiliser le DateFormatter pour imprimer la date, en ignorant le fuseau horaire?

C'est comme ça que je l'ai fait:

function getDateString(value:Date):String
{
    var millisecondsPerMinute:int = 1000*60;
    var newDate:Date = new Date(value.time - (millisecondsPerMinute*value.timezoneOffset));

    var dateFormatter:DateFormatter = new DateFormatter();
    dateFormatter.formatString = "EEEE DD-MM-YYYY LL:MM AA";

    return dateFormatter.format(newDate);
}
Était-ce utile?

La solution

Peut-être qu'il me manque quelque chose, mais cela semble fonctionner pour moi.

<?xml version="1.0"?>
<!-- formatters\FormatterDateField.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

<!-- Declare a DateFormatter and define formatting parameters.-->
<mx:DateFormatter id="dateFormatter" 
    formatString="EEEE DD-MM-YYYY LL:NN:SS AA"/>

<mx:Label text="Millis (1220836618601 == Monday 08-09-2008 01:16:58 AM):"/>
<mx:TextInput id="dob" text="1220836618601"/>

<mx:Label text="Formatted date UTC: "/>
<mx:TextInput id="formattedDate" 
    text="" 
    editable="false"/>
<mx:Label text="Formatted date local: "/>
<mx:TextInput id="formattedDateLoc" 
    text="" 
    editable="false"/>

<!-- Format and update the date.-->
<mx:Button label="Format Input" 
    click="
        var d :Date = new Date(parseInt(dob.text));
        formattedDate.text=dateFormatter.format(d.toUTCString());
        formattedDateLoc.text=dateFormatter.format(d);
    "/>
</mx:Application>

Suggérant qu'au lieu de passer l'objet date (qui dépend du fuseau horaire) dans le DateFormatter, passez plutôt dans la chaîne UTC de l'objet de date. Je n'ai rien trouvé qui suggérerait que le DateFormatter fait quoi que ce soit dans le fuseau horaire, donc il ne devrait pas être nécessaire d'essayer de compenser le fuseau horaire, surtout lorsque l'objet Date fournit déjà une méthode pour obtenir l'UTC.

function getDateString(value:Date):String
{
    var dateFormatter:DateFormatter = new DateFormatter();
    dateFormatter.formatString = "EEEE DD-MM-YYYY LL:MM AA";

    return dateFormatter.format(value.toUTCString());
}

Autres conseils

Dans Flex Hero 4.5, vous pouvez utiliser le nouveau Spark DateTimeFormatter:

<s:DateTimeFormatter dateTimePattern="HH':'mm':'ss" id="dateFormatterUTC" useUTC="true" />
<s:Label text="{dateFormatterUTC.format(new Date())}" />

Les correctifs les plus simples sont d'avoir autant d'objets que vous le pouvez (et les propriétés des objets) être des chaînes. La solution de texoneoffset fonctionne correctement, mais le temps de temps pour de nombreuses villes américaines change deux fois au cours de l'année. La meilleure règle - tout est une chaîne.

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