Actionscript 3 - Самый Быстрый способ проанализировать yyyy-mm-dd hh:mm:ss к объекту Даты?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

23
задан ketan 16 December 2015 в 05:35
поделиться

5 ответов

Я использовал следующий 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 повторения за значительно меньше, чем секунда на моей машине.

17
ответ дан Theo 29 November 2019 в 02:44
поделиться

Я предполагаю Дату. Синтаксический анализ () не работает?

2
ответ дан GateKiller 29 November 2019 в 02:44
поделиться

Это было самым быстрым, я мог придумать после некоторой игры:

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 ));
}

я вкладываю 50k повторения приблизительно 470 мс для castMethod2 () на моем компьютере и 300 мс для моей версии (это - тот же объем работы, сделанный в 63% времени). Я определенно сказал бы, что оба "Достаточно хороши", если Вы не анализируете глупые суммы дат.

5
ответ дан grapefrukt 29 November 2019 в 02:44
поделиться

Хорошо тогда метод 2 кажется лучшим способом:

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 ));
}
1
ответ дан GateKiller 29 November 2019 в 02:44
поделиться

Поскольку Date.parse () не принимает все возможные форматы, мы можем предварительно отформатировать переданный значение dateString с использованием DateFormatter с formatString, которое может понять Data.parse (), например

// English formatter
var stringValue = "2010.10.06"
var dateCommonFormatter : DateFormatter = new DateFormatter();
dateCommonFormatter.formatString = "YYYY/MM/DD";

var formattedStringValue : String = dateCommonFormatter.format(stringValue);                                
var dateFromString : Date = new Date(Date.parse(formattedStringValue));
1
ответ дан 29 November 2019 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: