0

自 1970 年 1 月 1 日以来,我以毫秒为单位从服务器接收日期。然后我使用 DateFormatter 将日期打印到屏幕上。但是,Flex 增加了时差,因此它显示的时间与我从服务器获得的时间不同。我已经通过在打印到屏幕之前更改日期来解决这个问题。但我认为这是一个糟糕的解决方案,因为日期对象不包含正确的日期。

有谁知道如何使用 dateFormatter 打印日期,忽略时区?

我就是这样做的:

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);
}
4

3 回答 3

2

也许我缺少一些东西,但这似乎对我有用。

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

建议不要将日期对象(取决于时区)传递给 dateFormatter,而是传入日期对象的 UTC 字符串。我没有发现任何暗示 DateFormatter 对时区做任何事情的东西,所以不需要尝试补偿时区,尤其是当日期对象已经提供了获取 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());
}
于 2009-12-14T11:32:30.640 回答
1

在 Flex Hero 4.5 中,您可以使用新的Spark DateTimeFormatter

<s:DateTimeFormatter dateTimePattern="HH':'mm':'ss" id="dateFormatterUTC" useUTC="true" />
<s:Label text="{dateFormatterUTC.format(new Date())}" />
于 2011-04-11T14:37:45.190 回答
-1

最简单的修复方法是让尽可能多的对象(以及对象的属性)成为字符串。timezoneOffset 解决方案工作正常,但许多美国城市的 timezoneOffset 在一年中变化两次。最好的规则——一切都是字符串。

于 2009-12-15T17:07:49.640 回答