Mat*_*ean 23 apache-flex actionscript-3
我一直试图找到一种非常快速的方法来将yyyy-mm-dd [hh:mm:ss]解析为Date对象.以下是我尝试过的3种方法以及每种方法解析50,000个日期时间字符串所需的时间.
有谁知道更快的方法或加快方法的提示?
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不会处理破折号.我需要为日期时间字符串返回null "0000-00-00".
The*_*heo 17
我一直在使用以下snipplet来解析UTC日期字符串:
private function parseUTCDate( str : String ) : Date {
    var matches : Array = str.match(/(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)Z/);
    var d : Date = new Date();
    d.setUTCFullYear(int(matches[1]), int(matches[2]) - 1, int(matches[3]));
    d.setUTCHours(int(matches[4]), int(matches[5]), int(matches[6]), 0);
    return d;
}
只需删除时间部分,它应该可以满足您的需求:
private function parseDate( str : String ) : Date {
    var matches : Array = str.match(/(\d\d\d\d)-(\d\d)-(\d\d)/);
    var d : Date = new Date();
    d.setUTCFullYear(int(matches[1]), int(matches[2]) - 1, int(matches[3]));
    return d;
}
不知道速度,我在我的应用程序中并没有担心这一点.在我的机器上显着不到一秒的50K迭代次数.
这是一些摆弄后我能想到的最快的:
private function castMethod4(dateString:String):Date {          
    if ( dateString == null ) 
        return null;    
    if ( dateString.length != 10 && dateString.length != 19) 
        return null;
    dateString = dateString.replace("-", "/");
    dateString = dateString.replace("-", "/");
    return new Date(Date.parse( dateString ));
}
对于我的计算机上的castMethod2(),我在470毫秒内获得了50k次迭代,而对于我的版本,我获得了300毫秒(这与63%的时间内完成的工作量相同).我肯定会说两者都"足够好",除非你解析愚蠢的日期.
| 归档时间: | 
 | 
| 查看次数: | 31572 次 | 
| 最近记录: |