Pregunta

Recibo una fecha de un servidor en milisegundos desde el 1-1-1970. Luego uso el DateFormatter para imprimir la fecha en la pantalla. Sin embargo, Flex agrega TimEdiFference y, por lo tanto, muestra un tiempo diferente al que obtuve del servidor. He arreglado esto cambiando la fecha antes de imprimir en la pantalla. Pero creo que es una mala solución porque el objeto de fecha no tiene la fecha correcta.

¿Alguien sabe cómo usar la Fecha para imprimir la fecha, ignorando la zona horaria?

Así es como lo hice:

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);
}
¿Fue útil?

Solución

Tal vez hay algo que me estoy perdiendo, pero esto parece funcionar para mí.

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

Sugiriendo que, en lugar de pasar el objeto de fecha (que depende de la zona horaria) en el DateFormatter, pase en la cadena UTC del objeto de fecha. No encontré nada que sugiriera que DateFormatter le haga nada a la zona horaria, por lo que no debería haber ninguna necesidad de tratar de compensar la zona horaria, especialmente cuando el objeto de fecha ya proporciona un método para obtener el 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());
}

Otros consejos

En Flex Hero 4.5 puedes usar el nuevo Spark DateTimeFormatter:

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

La más simple de las correcciones es tener tantos objetos como pueda (y propiedades de los objetos) ser cadenas. La solución TimeZoneOffset funciona bien, pero la zona de tiempo TimeSfet para muchas ciudades de EE. UU. Cambia dos veces durante el año. La mejor regla: todo es una cadena.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top