簡體   English   中英

flex3格式化不帶時區的日期

[英]flex3 Format date without timezone

我從1970年1月1日開始以毫秒為單位從服務器接收日期。 然后,我使用DateFormatter將日期打印到屏幕上。 但是,Flex增加了時差,因此顯示的時間與我從服務器獲得的時間不同。 我已通過在打印到屏幕前更改日期來解決此問題。 但是我認為這是一個不好的解決方案,因為date對象沒有正確的日期。

有誰知道如何使用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);
}

也許我缺少一些東西,但這似乎對我有用。

<?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對時區執行任何操作的內容,因此不需要嘗試補償時區,特別是當date對象已經提供了獲取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());
}

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

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

修復最簡單的方法是使盡可能多的對象(以及對象的屬性)成為字符串。 timezoneOffset解決方案可以正常工作,但是美國許多城市的timezoneOffset在這一年中發生了兩次更改。 最佳規則-一切都是字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM