0

1-1-1970以降、サーバーからミリ秒単位で日付を受信して​​います。次に、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);
}
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では、新しいSparkDateTimeFormatterを使用できます。

<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は1年に2回変更されます。最良のルール-すべてが文字列です。

于 2009-12-15T17:07:49.640 に答える