Разве ваш формат даты не должен выглядеть примерно так:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
, чтобы соответствовать этому формату:
Date d = df.parse("2009-01-28-09:11:12");
?
Почему, согласно этому:
синтаксический анализатор фактически смотрит на них как на числа, и хитрость в том, что - это часть числа, представляющая отрицательные числа.Так что если вы сделаете:
df.parse("2009-01-02-00:00:00")
, то получится:
Mon Dec 01 00:02:00 EST 2008
, который анализирует 2009 как гггг, затем -0 как MM (то есть предыдущий месяц, когда месяцы начинаются с 1), затем1 как дд и т. Д.
Согласно синтаксическому анализу в DateFormat:
По умолчанию синтаксический анализ является мягким: есливходные данные не в форме, используемой методом форматирования этого объекта, но могут все еще быть проанализированы как дата, тогда анализ успешно завершен.Клиенты могут настаивать на строгом соблюдении формата, вызывая setLenient (false).
Полагаю, если у вас есть возможность, было бы лучше использовать косые черты вместо черточек, если вам нравятся форматы, такие как 2009/01/02 12:34:56.Это:
df.parse("2009/01/02-00:00:00")
сгенерирует исключение:
ERROR java.text.ParseException:
Unparseable date: "2009/01/02-00:00:00"
Я могу только заключить, что это очень хорошо, что /
не считается делением чисел по DateFormat ...