Frage

Ich erhalte seit 1-1-1970 einen Datum von einem Server in Millisekunden. Ich verwende dann das DateFormatter, um das Datum auf den Bildschirm zu drucken. Flex fügt jedoch eine Zeitabgabe hinzu und zeigt somit eine andere Zeit an als das, was ich vom Server erhalten habe. Ich habe dies behoben, indem ich das Datum geändert habe, bevor ich auf den Bildschirm gedruckt habe. Aber ich denke, das ist eine schlechte Lösung, da das Datumsobjekt nicht das richtige Datum hat.

Weiß jemand, wie man das DateFormatter verwendet, um das Datum zu drucken und die Zeitzone zu ignorieren?

So habe ich es gemacht:

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);
}
War es hilfreich?

Lösung

Vielleicht fehlt mir etwas, aber das scheint für mich zu funktionieren.

<?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>

Anstatt das Datumsobjekt (das Zeitzon abhängig ist) in das Datum der DateFormatter zu übergeben, übergeben Sie stattdessen die UTC -Zeichenfolge des Datumsobjekts. Ich habe nichts gefunden, was darauf hindeutet, dass das DateFormatter etwas bis zur Zeitzone tut. Daher sollte es nicht nötig sein, die Zeitzone zu kompensieren, insbesondere wenn das Datumsobjekt bereits eine Methode zum Erhalten der UTC bietet.

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

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

Andere Tipps

In Flex Hero 4.5 können Sie das neue verwenden Spark DateTimeFormatter:

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

Die einfachsten Korrekturen sind so viele Objekte wie möglich (und Eigenschaften von Objekten). Die TimeZoneOffset -Lösung funktioniert einwandfrei, aber das TimeZoneOffset für viele US -Städte ändert sich im Laufe des Jahres zweimal. Die beste Regel - alles ist eine Zeichenfolge.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top