我有一个Flex Mobile应用程序,它得到了rss提要,时区不正确。我希望它在美国中部时间。需要格式化时区。我已经在下面粘贴了工作代码,但需要修复时区问题。
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:ns1="*"
backgroundColor="#74171E" title="Mediacom 2 / Paulbunyan 32"
viewActivate="refresh()">
<fx:Script>
<![CDATA[
protected function getData():void
{
getDataResult.token = iCTVChannel232.getData();
}
public function refresh(): void {
getData();
}
private function dateFormat(item:Object,column:GridColumn):String
{
return pubDateFormatter.format(item.pubDate);
}
]]>
</fx:Script>
<fx:Declarations>
<s:DateTimeFormatter id="pubDateFormatter" useUTC="false" dateTimePattern="MM-dd K:mm a"/>
<s:CallResponder id="getDataResult"/>
<ns1:ICTVChannel232 id="iCTVChannel232"/>
</fx:Declarations>
<s:DataGrid id="dataGrid" left="10" right="10" top="10" bottom="10">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="pubDate" width="80" headerText="Date" labelFunction="dateFormat"></s:GridColumn>
<s:GridColumn dataField="title" headerText="title"></s:GridColumn>
</s:ArrayList>
</s:columns>
<s:AsyncListView list="{getDataResult.lastResult}"/>
</s:DataGrid>
<s:actionContent>
<s:Button icon="@Embed('/assets/refreshico.png')"
click="Object(navigator.activeView).refresh()"/>
</s:actionContent>
Flash中的Date对象始终设置为计算机的时间设置。如果计算机已经在CDT时区中,那么只需从对象中获取任何属性就可以了。但是,如果你想将时区"转换"为计算机未设置的时区,你可以获得UTC时间,并对CDT:进行这样的偏移
var date:Date = new Date();
var timezone:int = -5;
date.hours = date.hoursUTC + timezone;
然而,你正试图获得实际的CDT时间,它只在某些地区的夏季有效。为此,Flash不可能知道确切的时间,除非你对异常进行编码(即,如果在这个日期和那个日期之间,则执行-6,否则执行-5),并且你还需要知道用户的实际位置(除非用户向你提供信息,否则通过Flash是不可能的)。
<fx:Script>
<![CDATA[
protected function getData():void
{
getDataResult.token = iCTVChannel232.getData();
}
public function refresh(): void {
getData();
}
private function dateFormat(item:Object,column:GridColumn):String
{
var date:Date = item.pubDate;
var timezone:int = -5;
date.hours = date.hoursUTC + timezone;
return pubDateFormatter.format(date);
}
]]>
</fx:Script>