Конвертиране между String и Timestamp

1. Общ преглед

Timestamp е един от малкото наследени обекти за дата и час в Java.

В този урок ще видим как да анализираме стойност от String до обект Timestamp и как да форматираме обект Timestamp към String.

И тъй като Timestamp разчита на Java-патентован формат, ще видим как ефективно да се адаптираме.

2. Анализирайте низ на времева марка

2.1. Стандартен формат

Най-простият начин за синтактичен анализ на String на Timestamp е методът valueOf :

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

И когато нашият String е във формат JDBC с клеймо - yyyy-m [m] -d [d] hh: mm : ss [.f…] - тогава е доста просто.

Можем да интерпретираме този модел по следния начин:

модел Описание Пример
гггг Представлява годината и е задължително да имате четири цифри за нея. 2018 г.
m [m] За месечния компонент трябва да имаме една или две цифри (от 1 до 12). 1, 11
г [г] За стойността на деня от месеца трябва да имаме една или две цифри (от 1 до 31). 7, 12
хм Стои за часа на деня, с допустими стойности от 0 до 23. 01, 16
mm Стои за минути от часа, с допустими стойности от 0 до 59. 02, 45
ss Стои за секунди в минута, с допустими стойности от 0 до 59. 03, 52
[.f…] Представя незадължителни части от секундата, може да бъде с точност до наносекунди, така че разрешените стойности са от 0 до 999999999. 12, 1567, 123456789

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

Сега, ако не е във формат JDBC timestamp, тогава за щастие valueOf също взема екземпляр 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));

И тогава можем да използваме valueOf от преди:

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

Мимоходом забележете, че за разлика от обект Date , Timestamp обектът може да съхранява части от секундата.

3. Форматирайте клеймото като низ

За да форматираме Timestamp , ще имаме същото предизвикателство, тъй като форматът по подразбиране е патентованият формат на JDBC timestamp:

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.