Domanda

Ricevo una data da un server in millisecondi dal 1970/01/01. Ho quindi utilizzare il DateFormatter per stampare la data sullo schermo. Tuttavia, Flex aggiunge TimeDifference e quindi visualizza un tempo diverso da quello che ho ottenuto dal server. Ho risolto questo cambiando la data prima di stampare a schermo. Ma penso che sia una cattiva soluzione perché l'oggetto data non detiene la data corretta.

Qualcuno sa come utilizzare il dateFormatter per stampare la data, ignorando il fuso orario?

questo è come ho fatto:

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);
}
È stato utile?

Soluzione

Forse c'è qualcosa che mi manca, ma questo sembra funzionare per me.

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

Suggerendo che invece di passare l'oggetto data (che è fuso orario dipendente) nel dateFormatter, passare UTC String dell'oggetto data invece. Non ho trovato nulla che possa suggerire che il DateFormatter fa nulla per il fuso orario, quindi non ci dovrebbe essere alcun bisogno di cercare di compensare il fuso orario, soprattutto quando l'oggetto Data fornisce già un metodo per ottenere 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());
}

Altri suggerimenti

In Flex Eroe 4.5 è possibile utilizzare la nuova Spark DateTimeFormatter :

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

Il più semplice di correzioni è quello di avere il maggior numero di oggetti che puoi (e le proprietà degli oggetti) essere stringhe. La soluzione timezoneOffset funziona bene, ma la timezoneOffset per molte città degli Stati Uniti cambia due volte durante l'anno. La migliore regola -. Tutto ciò è una stringa

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top