Apache flex 在Flex4中是否有一种简单的方法可以根据区域设置自动格式化日期?

Apache flex 在Flex4中是否有一种简单的方法可以根据区域设置自动格式化日期?,apache-flex,flex4,Apache Flex,Flex4,我知道可以将本地特定的ResourceBundle与DateFormatters结合使用,根据区域设置格式化日期。但是,这是一个手动过程-是否有一种自动方法来执行此操作或为应用程序设置默认值 例如,在Java中,只要设置区域设置,您的所有日期都将自动以dd/mm/yy或mm/dd/yy格式显示。在Flex中,除非手动格式化,否则默认日期输出将始终为US格式。我正在寻找一种更接近Java功能的方法。看看toLocaleString和toLocaleTimeString () ()这是放在Flash

我知道可以将本地特定的ResourceBundle与DateFormatters结合使用,根据区域设置格式化日期。但是,这是一个手动过程-是否有一种自动方法来执行此操作或为应用程序设置默认值


例如,在Java中,只要设置区域设置,您的所有日期都将自动以dd/mm/yy或mm/dd/yy格式显示。在Flex中,除非手动格式化,否则默认日期输出将始终为US格式。我正在寻找一种更接近Java功能的方法。

看看toLocaleString和toLocaleTimeString

()


()

这是放在Flash.globalization包中的Flash Player 10.1的一项功能


我最近使用flah.globalization类完成了这项工作: 请参阅关于获取区域设置等的信息。。 这是我的密码:

记住调用init();创作完成

<fx:Script>
    <![CDATA[

        import flash.globalization.DateTimeFormatter;
        import flash.globalization.DateTimeStyle;
        import flash.globalization.StringTools;

        import mx.collections.ArrayCollection;

        import spark.events.IndexChangeEvent;


        [Bindable]
        private var listColl:ArrayCollection;

        private var localeList:Array = new Array("en-US", "fr-FR", "es-ES","ja-JP", "hi-IN","ru-RU");


        private var country:String;


        private function init():void{

            // set the dp for drop down;
            listColl = new ArrayCollection(localeList);
            country = localeList[0];
        }


    private function doDateLabel(item:Date):String {

    trace("input = " + item);

    if(item != null) {


        var locale:String = country;
        if(locale != null){

        var dtf:DateTimeFormatter = new DateTimeFormatter(locale);

            dtf.setDateTimeStyles(DateTimeStyle.SHORT, DateTimeStyle.NONE);
        /*
            DateTimeSyle.MEDIUM
        DateTimeSyle.LONG   

            */


            var shortDate:String = dtf.format(item);
            trace(shortDate + " (" + dtf.getDateTimePattern() + ")");

            }    
        }
    return shortDate;
    }

        protected function dropDownList_changeHandler(evt:IndexChangeEvent):void {
            country = countryList.selectedItem;
        }




    ]]>
</fx:Script>


<s:HGroup width="100%" height="100%" gap="20" top="50"  left="50">

    Hope that's what you were after 
    <mx:DateField id="begin" width="200"
                  showToday="true"
                  labelFunction="doDateLabel" 
                  parseFunction="null"/>

    <s:DropDownList id="countryList"
                    requireSelection="true" prompt="Please select an Country" 
                    horizontalCenter="0" top="20" dataProvider="{listColl}" 
                    change="dropDownList_changeHandler(event);">

    </s:DropDownList>
</s:HGroup>

希望这就是你想要的

谢谢你的帮助,很方便,但不是100%。以DateTimeAxis为例,默认情况下,它可能会将日期的格式设置为mm/dd/yy,这本身非常方便。我想要相同但格式相同的dd/mm/yy。我想我只需要编写一些LabelFunction,像这家伙说的那样获取区域设置字符串。@Fletch;在您最初的问题中,您说过“除非手动格式化,否则Flex将始终使用US格式。”我不确定标准日期函数,但我指定的区域设置方法应参考播放器的区域设置,该区域设置不应始终基于US。是否有任何国家使用日/月/年格式化日期?在我看来,您需要手动设置日期格式。基本上,除了en_US之外,所有地区都将日期设置为月份前一天的格式。如果你想要的是“2010年9月3日”,那么你的方法实际上非常有效。在我的例子中,我想要的是3/9/10,但没有方法。我的意思是:基本上,除了en_US之外,每个地区的日期格式都是月前一天。如果您想要的是“2010年9月3日”,那么您的方法实际上非常有效,因此它在其他情况下也会派上用场。在我的例子中,DateTimeAxis没有任何配置,它足够聪明,可以根据axis覆盖的范围来判断它是否应该显示时间、日期或组合(非常酷)。我可以重写它,但我想利用“自动计算”功能,只需稍加修改,如果它显示mmddyy类型的字符串,那么它将以dd/mm/yy格式显示。@Fletch我不是本地化专家,但我认为大多数地区使用yyyy/mm/dd;而美国则使用mm/dd/yyyy。哪一个把一天放在第一位?不过,您应该能够将DateTimeAxis扩展为重新格式化日期。我希望这会相对容易,但这取决于课堂上有多少是私人的。