在Flex中,要通过传入时间的字符串和格式字符串的方式来转换出Date,Flex本身没有完善的方法,不知道Adobe在想什么,这么简单实用的功能都没有.(回想起来,还是java神马的好)
在网上找了好久都没有完善的解决方案,最后偶然发现DateField带着一个StringToDate的静态方法,但是只支持"年月日"的日期格式,不支持"时分秒"等的时间格式,于是对其功能进行了扩展.
闲话不多扯,下面是源代码,拿去直接可以用.
目前只扩展到了对"年月日时分秒".
ActionScript:
public function string2Date(valueString:String, inputFormat:String):Date
{
var mask:String
var temp:String;
var dateString:String = "";
var monthString:String = "";
var yearString:String = "";
var hourString:String = "";
var minuteString:String = "";
var secondString:String = "";
var j:int = 0;
var n:int = inputFormat.length;
for (var i:int = 0; i < n; i++,j++)
{
temp = "" + valueString.charAt(j);
mask = "" + inputFormat.charAt(i);
if (mask == "M")
{
if (isNaN(Number(temp)) || temp == " ")
j--;
else
monthString += temp;
}
else if (mask == "D")
{
if (isNaN(Number(temp)) || temp == " ")
j--;
else
dateString += temp;
}
else if (mask == "Y")
{
yearString += temp;
}
else if(mask=="J")
{
if (isNaN(Number(temp)) || temp == " ")
j--;
else
hourString += temp;
}
else if(mask=="N")
{
if (isNaN(Number(temp)) || temp == " ")
j--;
else
minuteString += temp;
}
else if(mask=="S")
{
if (isNaN(Number(temp)) || temp == " ")
j--;
else
secondString += temp;
}
else if (!isNaN(Number(temp)) && temp != " ")
{
return null;
}
}
temp = "" + valueString.charAt(inputFormat.length - i + j);
if (!(temp == "") && (temp != " "))
return null;
var monthNum:Number = Number(monthString);
var dayNum:Number = Number(dateString);
var yearNum:Number = Number(yearString);
var hourNum:Number = Number(hourString);
var minuteNum:Number = Number(minuteString);//如果字符串为空会转换成0
var secondNum:Number = Number(secondString);
if (isNaN(yearNum) || isNaN(monthNum) || isNaN(dayNum))
return null;
if (yearString.length == 2 && yearNum < 70)
yearNum+=2000;
var newDate:Date = new Date(yearNum, monthNum - 1, dayNum,hourNum,minuteNum,secondNum);
if (dayNum != newDate.getDate() || (monthNum - 1) != newDate.getMonth())
return null;
return newDate;
}