Рубрики
Без рубрики

Преобразование между строкой и меткой времени

Узнайте, как конвертировать между строкой и меткой времени с небольшой помощью LocalDateTime и Java 8.

Автор оригинала: baeldung.

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 .