如果你看到我这篇文章~我会告诉你,这个问题终于可以比较友好的解决了!!!
之前项目中经常遇到这一问题,但是在网上各种搜索,50%的解决办法是 用DateFormatter,但是,显而易见,这是Flex 3的解决方案,还有一部分是重写 DateField控件的stringToDate方法实现,还有一些人呢,用spark标签DateTimeFormatter实现,
对于十分想要用flex 4 、用 纯脚本的方式解决问题的我们来说~ 以上 均不是最佳方案!
各种忍不了了~~~所以 翻翻API,发现了以下几个类或方法,Adobe在一定程度想让开发者更灵活的使用date对象。
列出用到的类及方法
flash.globalization.DateTimeFormatter; 用于格式化 date对象
Date.parse 用于将格式化的date字符串转化成 从1970年1月1日00:00:00开始的毫秒数。
好了,下面给出我的静态方法:
/**
* 将date 转换成 “yyyy-MM-dd HH:mm:ss”的字符串
*
*/
public static function getDateStr(date:Date):String{
if(date){
var dtf:DateTimeFormatter=new DateTimeFormatter("zh-CN");
dtf.setDateTimePattern("yyyy-MM-dd HH:mm:ss");
/* 传统方式可以用下面这个拼字符串的方案来解决。
date.fullYear+"-"+fillZero(date.month+1)+"-"
+fillZero(date.date)+" "+fillZero(date.hours)+":"
+fillZero(date.minutes)+":"+fillZero(date.seconds)
*/
return dtf.format(date);
}
return null;
}
/**
* 格式化的 date字符串转化Date对象,注意,除了使用date parse 可识别的标准时间字符串外,还可以
* 使用yyyy-MM-dd HH:mm:ss格式,代码中将“-”替换成“/”后,parse方法可以正确识别。
*/
public static function getDateByStr(date:String):Date{
var res:Date=null;
if(date){
var mil:Number=Date.parse(date.replace(/\-/g,"/"));
res=new Date(mil);
}
return res;
}
里面的fillZero方法是用于补位的。
/**
* 补齐 数位
*/
public static function fillZero(num:Number,totalLength:Number=2):String{
var resultStr:String=num+"";
if(resultStr.length==totalLength){
}else if(resultStr.length<totalLength){
for(var i:int=0;i<(totalLength-resultStr.length);i++){
resultStr="0"+resultStr;
}
}else{
resultStr=null;
}
return resultStr;
}
最后的验证语句:
var s:String="2013-12-21 11:20:32";
var d:Date=new Date();
trace("A:"+d.toDateString());
d=getDateByStr(s);
trace("B:"+d.toString());
var s2:String=getDateStr(d);
trace("over:"+s2);
执行结果:
A:Wed Dec 31 2014
B:Sat Dec 21 11:20:32 GMT+0800 2013
over:2013-12-21 11:20:32