У меня есть Java-приложение, в котором я хотел бы время в UTC. В настоящее время код использует сочетание java.util.Date
и java.sql.Timestamp
. Чтобы получить время в UTC, программист передо мной использовал:
Дата:
Date.from(ZonedDateTime.now(ZoneOffset.UTC)).toInstant();
Для отметки времени:
Timestamp.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
Однако я сам выполнял несколько тестов с этим кодом, и обе эти строки возвращают текущую дату/время (в моем текущем часовом поясе). Из всего, что я прочитал, появляется, что Date/Timestamp не имеет значения zoneOffset, но я не могу найти конкретную формулировку этого.
Есть ли способ сохранить timeZone (UTC) в объектах Date или Timestamp, или мне нужно сделать некоторые рефакторинг и использовать фактический объект ZonedDateTime во время моего приложения? Также будет ли этот объект ZonedDateTime совместим с текущим объектом Timestamp для sql?
Пример:
public static void main (String args[])
{
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneOffset.UTC);
Timestamp timestamp = Timestamp.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
Date date = Date.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
System.out.println("ZonedDateTime: " + zonedDateTime);
System.out.println("Timestamp: " + timestamp);
System.out.println("Date: " + date);
}
Выход:
ZonedDateTime: 2017-04-06T15:46:33.099Z
Timestamp: 2017-04-06 10:46:33.109
Date: Thu Apr 06 10:46:33 CDT 2017