Flex Builder dateFormatter时区偏移量

时间:2012-01-31 23:15:12

标签: android timezone flash-builder flexbuilder

我有一个获得RSS Feed的Flex Mobile应用,时区不正确。我希望它能在CST中部时间。需要格式化时区。我已粘贴下面的工作代码,但需要修复时区问题。

<?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>

1 个答案:

答案 0 :(得分:0)

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>