TimeZoneなしのFlex3フォーマット日
-
19-09-2019 - |
質問
1970年1月1日からミリ秒単位でサーバーから日付を受け取ります。次に、DateFormatterを使用して日付を画面に印刷します。ただし、Flexはタイムディフェンスを追加するため、サーバーから得たものとは異なる時間を表示します。画面に印刷する前に日付を変更することでこれを修正しました。しかし、日付オブジェクトが正しい日付を保持しないため、それは悪い解決策だと思います。
TimeZoneを無視して、日付を印刷して日付Formatterを使用する方法を知っている人はいますか?
これが私がそれをした方法です:
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がTimeZoneに何かをすることを示唆するものは何も見つかりませんでした。そのため、特に日付オブジェクトがすでに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は、年間に2回変更されます。最良のルール - すべてが文字列です。
所属していません StackOverflow