Почему Java SimpleDateFormat().parse() печатает странный формат?
-
21-09-2019 - |
Вопрос
Мой ввод представляет собой строку, имеющую следующий формат:
3/4/2010 10:40:01 AM
3/4/2010 10:38:31 AM
Мой код:
DateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy hh:mm:ss aa");
try
{
Date today = dateFormat.parse(time);
System.out.println("Date Time : " + today);
}
catch (ParseException e)
{
e.printStackTrace();
}
вывод:
Sun Jan 03 10:38:31 AST 2010
Sun Jan 03 10:40:01 AST 2010
Я не уверен, откуда взялся день (Солнце)?или (АСТ)?и почему дата неправильная?Я просто хотел сохранить тот же формат оригинала. Нить свидание и превратить его в Дата объект.
Я использую версию Netbeans 6.8 для Mac.
Решение
Если вы хотите напечатать дату в исходном формате, используйте метод формата:
System.out.println("Date Time : "+ dateFormat.format(today));
"странный" формат исходит из реализации Date toString, в javadoc говорится:Преобразует этот объект Date в строку вида:
доу пн дд чч:мм:сс ззз гггг
"I just wanted to keep the same format of the original String date and make it into a Date object."
Объект Date предназначен для представления определенного момента времени, вы не можете сохранить в нем формат исходной строки, поэтому у нас есть класс DateFormat.
Другие советы
Должно быть ММ, а не мм.Строчные мм обозначают минуты, а не месяцы.
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss aa");
MM
, нет mm
месяцами.Ты используешь mm
дважды - и по логике это одно и то же - минуты.
Ответ прост.Вы отобразили сегодняшнее значение Date.toString(), а не предполагаемую версию dateFormat.то, что вам нужно, это:
System.out.println("Date Time : " + dateFormat.format(today) );
Печать даты с использованием System.out.println() приводит к нанизывать() метод, вызываемый для объекта Date.
Строка формата, используемая в toString(), является причиной появления в выходных данных дня недели и часового пояса.
Это не считая ошибки синтаксического анализа, на которую указал Даффи.