Дополнительно
Actionscript 3 - Как быстрее всего разобрать yyyy-mm-dd hh:mm:ss в объект Date?
Я пытался найти действительно быстрый способ разбора yyyy-mm-dd [hh:mm:ss] в объект Date. Вот три способа, которыми я пытался это сделать, и время, которое требуется каждому методу для разбора 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"
.
23
7
Я'вэ использовал следующие snipplet для разбора строки даты мирового:
Просто удалить часть времени и он должен работать нормально для ваших нужд:
<удар>ни малейшего представления о скорости, я еще'т волнует, что в моих приложениях.</удара> 50к итераций значительно меньше, чем за секунду на моей машине.
Это самое быстрое, что я смог придумать после некоторого возиться:
Я получаю 50k итераций примерно за 470 мс для castMethod2() на моем компьютере и 300 мс для моей версии (это тот же объем работы, выполненный за 63% времени). Я бы определенно сказал, что оба варианта "достаточно хороши", если только вы не перебираете дурацкое количество дат.
Я'полагаю, что Date.Parse() не работает?
Тогда метод 2 представляется наиболее оптимальным:
Потому Что Дата.метод Parse() не принимает всех возможных форматов, мы можем preformat переданное значение дату с помощью DateFormatter с строкаформата, что данные.метод Parse() можно понять, Эл.г
Вот моя реализация. Дать это попробовать.