Вопрос

Я хочу сохранить объект 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 может форматировать и анализировать дату на основе очень простой системы шаблонов, включающей секунды и даже миллисекунды.

Остальные ответы все хороши.

Но когда делаешь такие вещи пожалуйста выберите формат, который сортирует правильно при кодировании как строка....«гггг/ММ/дд ЧЧ:мм:сс» — это нормально.Меня всегда поражает, когда инженеры-программисты выбирают формат даты, который не сортируется очевидным и удобным способом.

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

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

ИСО 8601

Использовать ИСО 8601 формат.

  • Он гибкий, включает секунды и доли секунды, если они есть, но вы также можете их не указывать, если они равны 0.
  • Это стандарт, поэтому все больше и больше инструментов форматируют и анализируют его.Отлично подходит для сериализации для хранения или обмена данными.
  • Это похоже на 2009-10-22T21:13:14, я должен сказать, что это довольно читабельно (хотя T посередине, обозначающее начало временной части, поначалу может показаться необычным).
  • Строки сортируются правильно, как просил Микера в другой ответ, если годы находятся в четырехзначном диапазоне от 1000 до 9999.
  • Классы java.time, современный API даты и времени Java, а также API 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() еще раз, так что это не должно удивлять.

Если вы хотите сделать это немного проще и не создавать свой собственный формат даты, который включает в себя большинство других ответов, вы можете использовать формат по умолчанию в java.time.Мгновенный:

(new Date()).toInstant.toString();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top