1. Обзор
Timestamp -один из немногих устаревших объектов даты и времени в Java.
В этом уроке мы увидим, как выполнить синтаксический анализ от String value до Метка времени объект и как отформатировать Метка времени объект в строку .
И поскольку Timestamp опирается на проприетарный формат Java, мы увидим, как эффективно адаптироваться.
2. Разбор строки на временную метку
2.1. Стандартный формат
Самый простой способ проанализировать Строка К Отметка времени является ли его Ценность метод:
Timestamp.valueOf("2018-11-12 01:02:03.123456789")
И когда наша Строка находится в формате временной метки JDBC – гггг-м[м]-д[д] чч:мм : сс [.f…] – тогда все довольно просто.
Мы можем интерпретировать этот паттерн следующим образом:
2018 | гггг | Представляет год, и для него обязательно должно быть четыре цифры. |
1, 11 | м[м] | Для компонента месяца мы должны иметь одну или две цифры (от 1 до 12). |
7, 12 | d[d] | Для значения дня месяца мы должны иметь одну или две цифры (от 1 до 31). |
01, 16 | чч | Обозначает час дня с допустимыми значениями от 0 до 23. |
02, 45 | мм | Обозначает минуты часа с допустимыми значениями от 0 до 59. |
03, 52 | сс | Обозначает секунды в минуте, с допустимыми значениями от 0 до 59. |
12, 1567, 123456789 | [.f…] | Представляет необязательные доли секунды, может быть с точностью до наносекунд, поэтому допустимые значения составляют от 0 до 999999999. |
2.2. Альтернативные форматы
Теперь, если он не находится в формате метки времени JDBC, то, к счастью, значение также принимает экземпляр LocalDateTime .
Это означает, что мы можем взять дату в любом формате, нам просто нужно сначала преобразовать ее в LocalDateTime :
String pattern = "MMM dd, yyyy HH:mm:ss.SSSSSSSS"; String timestampAsString = "Nov 12, 2018 13:02:56.12345678"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); LocalDateTime localDateTime = LocalDateTime.from(formatter.parse(timestampAsString));
И тогда мы можем использовать значение , которое мы делали раньше:
Timestamp timestamp = Timestamp.valueOf(localDateTime); assertEquals("2018-11-12 13:02:56.12345678", timestamp.toString());
Заметим попутно, что, в отличие от Даты объекта,/| Метка времени объект способен хранить доли секунды.
3. Отформатируйте метку времени в виде строки
Для форматирования a Метка времени , у нас будет та же проблема, так как формат по умолчанию-это проприетарный формат метки времени JDBC:
assertEquals("2018-11-12 13:02:56.12345678", timestamp.toString());
Но, опять же, используя промежуточное преобразование, мы можем отформатировать полученную строку | в другой шаблон даты и времени, как в стандарте ISO-8601:
Timestamp timestamp = Timestamp.valueOf("2018-12-12 01:02:03.123456789"); DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; String timestampAsString = formatter.format(timestamp.toLocalDateTime()); assertEquals("2018-12-12T01:02:03.123456789", timestampAsString);
4. Заключение
В этой статье мы рассмотрели, как преобразовать объекты String и Timestamp в Java. Кроме того, мы рассмотрели, как использовать преобразование LocalDateTime в качестве промежуточного шага для преобразования в различные шаблоны даты и времени и из них.
И обязательно найдите все эти примеры и фрагменты на GitHub .