私は、yyyy-mm-dd [hh:mm:ss]を解析してDateオブジェクトにする本当に高速な方法を見つけようとしています。ここで私がそれをやってみた3つの方法と、それぞれのメソッドが50,000の日付文字列を解析するのにかかる時間です。Actionscript 3 - yyyy-mm-dd hh:mm:ssをDateオブジェクトに解析する最速の方法は?
誰かがこれをやる方法を知っていますか?
castMethod1 takes 3673 ms
castMethod2 takes 3812 ms
castMethod3 takes 3931 ms
コード:
private function castMethod1(dateString:String):Date {
if (dateString == null) {
return null;
}
var year:int = int(dateString.substr(0,4));
var month:int = int(dateString.substr(5,2))-1;
var day:int = int(dateString.substr(8,2));
if (year == 0 && month == 0 && day == 0) {
return null;
}
if (dateString.length == 10) {
return new Date(year, month, day);
}
var hour:int = int(dateString.substr(11,2));
var minute:int = int(dateString.substr(14,2));
var second:int = int(dateString.substr(17,2));
return new Date(year, month, day, hour, minute, second);
}
-
private function castMethod2(dateString:String):Date {
if (dateString == null) {
return null;
}
if (dateString.indexOf("0000-00-00") != -1) {
return null;
}
dateString = dateString.split("-").join("/");
return new Date(Date.parse(dateString));
}
-
private function castMethod3(dateString:String):Date {
if (dateString == null) {
return null;
}
var mainParts:Array = dateString.split(" ");
var dateParts:Array = mainParts[0].split("-");
if (Number(dateParts[0])+Number(dateParts[1])+Number(dateParts[2]) == 0) {
return null;
}
return new Date(Date.parse(dateParts.join("/")+(mainParts[1]?" "+mainParts[1]:" ")));
}
いいえ、Date.parseはダッシュを処理しません。デフォルトではそして、私は"0000-00-00"
のような日付の時間文字列にnullを返す必要があります。
3つの関数例に対して50K回の反復がどれくらいかかったかを教えてください。そうすれば、「1秒未満」を視点に入れることができます。 – bzlm
varマッチとdをconstキーワードに置き換えると、余分なパフォーマンスがあるのだろうか? – UnknownJoe