Ответ 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
Я хочу сохранить объект Date в удобочитаемую строку (например, 22/10/2009 21:13:14), которая также может быть восстановлена для объекта Date.
Я пробовал много вещей, и лучшее, что я мог найти, это использовать DateFormater для синтаксического анализа и формирования, но у него есть неудача. Когда вы форматируете дату, вы теряете секундную информацию. Я попытался найти, есть ли возможность отформатировать его и отобразить секунды (даже лучше будет уровень миллисекунды, так как это позволяет разрешение объекта Date), но я пришел в себя.
Любые идеи?
Взгляните на 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
SimpleDateFormat
может форматировать и анализировать дату на основе очень простой системы шаблонов, содержащей секунды и даже миллисекунды.
Другие ответы на все хорошо.
Но при выполнении такого рода пожалуйста выберите формат, который правильно сортируется при кодировании в виде строки.... "yyyy/MM/dd HH: mm: ss" в порядке. Меня всегда поражает, когда разработчики программного обеспечения выбирают формат даты, который не сортируется очевидным, удобным способом.
В будущем вы сэкономите своих собратьев-разработчиков в какой-то отдаленной точке - подумайте, что это хорошая карма: -)
Немного не по теме, но я всегда чувствую необходимость напоминать людям, что DateFormat и SimpleDateFormat не являются потокобезопасными! В документации Sun четко сказано об этом, но я продолжаю находить код в дикой природе, где люди вставляют SimpleDateFormat в статическую...
Используйте формат ISO 8601.
2009-10-22T21:13:14
, я должен сказать, что его довольно понятный для человека (хотя T
посередине, означающий начало временной части, может сначала показаться необычным).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()
еще раз, поэтому это не должно удивлять.