Конвертировать между строкой и меткой времени
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.