سؤال

أتلقى موعد من خادم في المليين ثانية منذ 1-1-1970. ثم استخدم DateFormatter لطباعة التاريخ إلى الشاشة. ومع ذلك، يضيف Flex Triatifcerence وبالتالي يعرض وقتا مختلفا مما وصلت إليه من الخادم. لقد قمت بإصلاح هذا عن طريق تغيير التاريخ قبل الطباعة إلى الشاشة. لكنني أعتقد أن هذا حل سيء لأن كائن التاريخ لا يحمل التاريخ الصحيح.

هل يعرف أحد كيفية استخدام DateFormatter لطباعة التاريخ، وتجاهل timezone؟

هذه هي الطريقة التي فعلتها:

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>

مما يشير إلى أنه بدلا من اجتياز كائن التاريخ (الذي تعتمد TimeZone) في DateFormatter، تمر في سلسلة UTC Object Date بدلا من ذلك. لم أجد أي شيء يشير إلى أن Deadformatter يقوم بأي شيء في 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 يمكنك استخدام الجديد شرارة DatetimeFormatter.:

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

إن أبسط الإصلاحات هي أن يكون لديك أكبر عدد ممكن من الكائنات (وخصائص الكائنات). يعمل محلول TimeZoneOffset بشكل جيد، ولكن التوقيت الزمنية حول العديد من المدن الأمريكية يتغير مرتين خلال العام. أفضل قاعدة - كل شيء هو سلسلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top