Apache flex 在Flex4中是否有一种简单的方法可以根据区域设置自动格式化日期?
我知道可以将本地特定的ResourceBundle与DateFormatters结合使用,根据区域设置格式化日期。但是,这是一个手动过程-是否有一种自动方法来执行此操作或为应用程序设置默认值Apache flex 在Flex4中是否有一种简单的方法可以根据区域设置自动格式化日期?,apache-flex,flex4,Apache Flex,Flex4,我知道可以将本地特定的ResourceBundle与DateFormatters结合使用,根据区域设置格式化日期。但是,这是一个手动过程-是否有一种自动方法来执行此操作或为应用程序设置默认值 例如,在Java中,只要设置区域设置,您的所有日期都将自动以dd/mm/yy或mm/dd/yy格式显示。在Flex中,除非手动格式化,否则默认日期输出将始终为US格式。我正在寻找一种更接近Java功能的方法。看看toLocaleString和toLocaleTimeString () ()这是放在Flash
例如,在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扩展为重新格式化日期。我希望这会相对容易,但这取决于课堂上有多少是私人的。