Подтвердить что ты не робот

Удобный для чтения и распознаваемый формат даты в Java

Я хочу сохранить объект Date в удобочитаемую строку (например, 22/10/2009 21:13:14), которая также может быть восстановлена ​​для объекта Date.

Я пробовал много вещей, и лучшее, что я мог найти, это использовать DateFormater для синтаксического анализа и формирования, но у него есть неудача. Когда вы форматируете дату, вы теряете секундную информацию. Я попытался найти, есть ли возможность отформатировать его и отобразить секунды (даже лучше будет уровень миллисекунды, так как это позволяет разрешение объекта Date), но я пришел в себя.

Любые идеи?

4b9b3361

Ответ 1

Взгляните на java.text.SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS");
Date dt = new Date();
String S = sdf.format(dt); // formats to 09/23/2009 13:53:28.238
Date dt2 = sdf.parse(S); // parses back

Ответ 2

SimpleDateFormat может форматировать и анализировать дату на основе очень простой системы шаблонов, содержащей секунды и даже миллисекунды.

Ответ 3

Другие ответы на все хорошо.

Но при выполнении такого рода пожалуйста выберите формат, который правильно сортируется при кодировании в виде строки.... "yyyy/MM/dd HH: mm: ss" в порядке. Меня всегда поражает, когда разработчики программного обеспечения выбирают формат даты, который не сортируется очевидным, удобным способом.

В будущем вы сэкономите своих собратьев-разработчиков в какой-то отдаленной точке - подумайте, что это хорошая карма: -)

Ответ 4

Немного не по теме, но я всегда чувствую необходимость напоминать людям, что DateFormat и SimpleDateFormat не являются потокобезопасными! В документации Sun четко сказано об этом, но я продолжаю находить код в дикой природе, где люди вставляют SimpleDateFormat в статическую...

Ответ 5

ISO 8601

Используйте формат ISO 8601.

  • Его гибкость, он включает секунды и доли секунды, если они есть, но вы также можете оставить их, если они равны 0.
  • Его стандарт, поэтому все больше и больше инструментов форматируют и анализируют его. Отлично подходит для сериализации для хранения или обмена данными.
  • Это похоже на 2009-10-22T21:13:14, я должен сказать, что его довольно понятный для человека (хотя T посередине, означающий начало временной части, может сначала показаться необычным).
  • Строки сортируются правильно, поскольку mikera запрашивает в еще один ответ, если годы находятся в четырехзначном диапазоне от 1000 до 9999.
  • Классы java.time, современный API дат и времени Java, а также Joda Time анализируют ISO 8601 как свое значение по умолчанию, то есть без какого-либо явного форматирования, и создают тот же формат из своих toString методы.

Скромная демонстрация использования java.time:

LocalDateTime dateTime = LocalDateTime.of(2009, 10, 22, 21, 13, 14);
String readableString = dateTime.toString();
System.out.println(readableString);
LocalDateTime parsedBack = LocalDateTime.parse(readableString);
System.out.println(parsedBack);

Отпечатывает две идентичные строки:

2009-10-22T21:13:14
2009-10-22T21:13:14

Последний вызов System.out.println() неявно вызывает toString() еще раз, поэтому это не должно удивлять.