2014-11-21 5 views
0

В настоящее время я пытаюсь разобрать даты (и времена), чтобы преобразовать их в миллисекунды с эпохи.Дата составления с подтверждением

Для этой цели я использую SimpleDateFormat для разбора с кодом, как это:

public static long parseDate(String date) { 
    // Parse 
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.US); 
    Date parsedDate = format.parse(date); 

    // Get milliseconds 
    Calendar cal = new GregorianCalendar(); 
    cal.setTime(parsedDate); 
    return cal.getTimeInMillis(); 
} 

Игра вокруг я обнаружил, что SimpleDateFormat действительно позволяет парсинг 1970-00-00 который разбирается в 1969-11-30. Думая об этом, это имеет смысл. Когда синтаксический анализатор просто «суммирует» все так, что 1969 год фактически понимается как «1969-11-30», а с 0 моментом «переполнение года» не происходит. К сожалению, я ничего не меняю, что эта дата недействительна (по крайней мере, так я понимаю даты).

Есть ли способ добавить валидацию, не используя сторонние библиотеки или java 8 (цель Android), или вам придется придерживаться регулярного выражения и проверки вручную?

Спасибо заранее!

ответ

1

Э Я очень сожалею, что отправил на этот вопрос ...

Ответ отключить снисходительное флаг с:

format.setLenient(false); 

Я не удалить этот вопрос, так что если кто-то натыкается это не нужно тратить часы на то, как изменить это ... Надеюсь, это поможет!

Что также приводит меня к вопросу, почему этот флаг включен по умолчанию?

Смежные вопросы