конвертировать между строкой и отметкой времени

Конвертировать между строкой и меткой времени

1. обзор

Timestamp - один из немногих устаревших объектов даты и времени в Java.

В этом руководстве мы увидим, как преобразовать значениеString в объектTimestamp и как отформатировать объектTimestamp вString.

А посколькуTimestamp полагается на собственный формат Java, мы увидим, как эффективно адаптироваться.

2. РазобратьString наTimestamp

2.1. Стандартный формат

Самый простой способ разобратьString to aTimestamp - это методvalueOf :

Timestamp.valueOf("2018-11-12 01:02:03.123456789")

А когда нашString находится в формате отметки времени JDBC -yyyy-m[m]-d[d] hh:mm: _ss [.f…] _ - тогда это довольно просто.

Мы можем интерпретировать этот шаблон следующим образом:

Шаблон Описание пример

yyyy

Представляет год, для которого обязательно должны быть четыре цифры.

2018

m[m]

Для компонента месяца у нас должна быть одна или две цифры (от 1 до 12).

1, 11

d[d]

Для значения дня месяца у нас должна быть одна или две цифры (от 1 до 31).

7, 12

hh

Обозначает час дня с допустимыми значениями от 0 до 23.

01, 16

mm

Обозначает минуты часа с допустимыми значениями от 0 до 59.

02, 45

ss

Обозначает секунды в минутах с допустимыми значениями от 0 до 59.

03, 52

[.f…]

Представляет необязательные доли секунды, может иметь точность до наносекунд, поэтому допустимые значения - от 0 до 999999999.

12, 1567, 123456789

2.2. Альтернативные форматы

Теперь, если это не в формате метки времени JDBC, то, к счастью,valueOf also принимает синстанциюLocalDateTime .

This means we can take a date in any format, нам просто нужно сначалаconvert it into a 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));

А затем мы можем использоватьvalueOf, которые мы использовали ранее:

Timestamp timestamp = Timestamp.valueOf(localDateTime);
assertEquals("2018-11-12 13:02:56.12345678", timestamp.toString());

Попутно отметим, чтоunlike a Date object, a Timestamp object is capable of storing fractions of a second.

3. ОтформатируйтеTimestamp какString

Чтобы отформатироватьTimestamp, нам придется столкнуться с той же проблемой, поскольку форматом по умолчанию является собственный формат метки времени JDBC:

assertEquals("2018-11-12 13:02:56.12345678", timestamp.toString());

Но, опять же, используя промежуточное преобразование, мы можем отформатировать полученныйString в другой шаблон даты и времени, например стандарт 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 в качестве промежуточного шага для преобразования в различные шаблоны даты и времени и обратно.

И не забудьте найти все эти примеры и фрагментыover on GitHub.