Flex3 Format Date без часового пояса
-
19-09-2019 - |
Вопрос
Я получаю дату с сервера в миллисекундах с 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);
}
Решение
Может быть, мне чего -то не хватает, но это, кажется, работает для меня.
<?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, вместо этого передайте строку объекта Date. Я не нашел ничего, что могло бы предположить, что 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 работает нормально, но временный сет для многих городов США дважды меняется в течение года. Лучшее правило - все это строка.