flex3 Формат даты без часового пояса - PullRequest
0 голосов
/ 14 декабря 2009

Я получаю дату от сервера в миллисекундах с 1-1-1970. Затем я использую 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);
}

Ответы [ 3 ]

2 голосов
/ 14 декабря 2009

Может быть, я что-то упускаю, но мне кажется, это работает.

<?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());
}
1 голос
/ 11 апреля 2011

В Flex Hero 4.5 вы можете использовать новый Spark DateTimeFormatter :

<s:DateTimeFormatter dateTimePattern="HH':'mm':'ss" id="dateFormatterUTC" useUTC="true" />
<s:Label text="{dateFormatterUTC.format(new Date())}" />
0 голосов
/ 15 декабря 2009

Самое простое из исправлений - иметь как можно больше строк (и свойств объектов), которые могут быть строками. Решение timezoneOffset работает отлично, но timezoneOffset для многих городов США меняется дважды в течение года. Лучшее правило - все это строка.

...