1. Общ преглед
И двата java.time.Instant и java.sql.Timestamp класове представляват точка на времевата линия в UTC. С други думи, те представляват броя на наносекунди от епохата на Java.
В този бърз урок ще преобразуваме едното в другото, като използваме вградени Java методи.
2. Преобразуване на моментално в клеймо и обратно
Можем да използваме Timestamp.from (), за да конвертираме Instant s в Timestamps:
Instant instant = Instant.now(); Timestamp timestamp = Timestamp.from(instant); assertEquals(instant.toEpochMilli(), timestamp.getTime());
И обратно, можем да използваме Timestamp.toInstant (), за да конвертираме Timestamp s в Instant s:
instant = timestamp.toInstant(); assertEquals(instant.toEpochMilli(), timestamp.getTime());
Така или иначе, както Instant, така и Timestamp представляват една и съща точка на времевата линия.
След това нека да разгледаме взаимодействието между двата класа и часовата зона.
3. Разлики в метода toString ()
Извикването на toString () на Instant и Timestamp се държи различно по отношение на часовата зона. Instant.toString () връща времето в часовата зона по UTC. От друга страна, Timezone.toString () връща времето в часовата зона на локалната машина.
Нека да видим какво получаваме при извикване на toString () съответно на момента и часовата зона :
Instant (in UTC): 2018-10-18T00:00:57.907Z Timestamp (in GMT +05:30): 2018-10-18 05:30:57.907
Тук timestamp.toString () доведе до време, което е 5 часа 30 минути след времето, върнато от instant.toString (). Това е така, защото часовата зона на локалната машина е GMT +5: 30 часова зона.
Резултатът от метода toString () е различен, но както клеймото за време, така и моментът представляват една и съща точка на времевата линия .
Можем да проверим това и чрез преобразуване на клеймото за време в часовата зона на UTC:
DateFormat df = DateFormat.getDateTimeInstance(); df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SS'Z'"); df.setTimeZone(TimeZone.getTimeZone("UTC")); assertEquals(instant.toString(), df.format(timestamp).toString());
4. Заключение
В този бърз урок видяхме как да конвертираме между класовете java.time.Instant и java.sql.Timestamp в Java с помощта на вградени методи.
Също така имахме поглед върху това как часовата зона влияе върху промяната на изхода.
И както винаги, пълните примери за код са достъпни в GitHub.