В моем приложении, работающем на Java 8, у меня есть объект Date. Часовой пояс для этого объекта зависит от местоположения клиента.
В какой-то момент мне нужно преобразовать эту дату в GMT, чтобы ее можно было сравнить со значением, к которому я обращаюсь из БД.
Я пробовал SimpleDateFormat и ZonedDateTime, но есть проблема. Эти API предоставляют мне время по Гринвичу в строковых значениях, что совершенно нормально. Однако, как только я проанализирую его и назначу объекту Date, он вернется к моему местному часовому поясу!
Для примера:
public class TimeZoneDemo {
public static void main(String[] args) throws ParseException {
Date istDate = Calendar.getInstance().getTime();
ZonedDateTime gmtTime = istDate.toInstant().atZone(ZoneId.of("GMT"));
System.out.println(gmtTime);
Date gmtDate = Date.from(gmtTime.toInstant());
System.out.println(gmtDate);
}
}
В приведенном выше коде gmtTime отображает правильное значение, соответствующее часовому поясу GMT, но gmtDate (объект Date ) выводит значение в местном часовом поясе.
P.S.: Моя конечная цель – получить значение GMT в объекте java.sql.TimeStamp.
Как это могло быть достигнуто?
ОБНОВЛЕНИЕ 1: После просмотра комментариев и ответов я понял, что объект Date просто содержит длинное значение, содержащее миллисекунды. НО я ожидаю, что когда эта строка будет выполнена:
Date gmtDate = Date.from(gmtTime.toInstant());
Какое бы время ни содержал объект gmtTime, мне нужно зафиксировать именно это время в объекте TimeStamp или Date. Мотив состоит в том, чтобы затем иметь возможность сравнивать со значением, сохраненным в базе данных. Я передаю дату в качестве параметра моему SQL-запросу.
Может ли кто-нибудь помочь мне понять, как этого можно достичь?
Date
иTimestamp
. Они плохо спроектированы и давно устарели. Используйте java.time, современный API даты и времени Java. - person Ole V.V.   schedule 05.09.2019java.sql.TimeStamp
. Заменено наOffsetDateTime
< /a> в JDBC 4.2 и более поздних версиях.myPreparedStatement.setObject( … , OffsetDateTime.now( ZoneOffset.UTC ) ) ;
иOffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
. Точно так же никогда больше не используйтеjava.util.Date
иjava.util.Calendar
. Заменено java.time, когда много лет назад был принят JSR 310. - person Basil Bourque   schedule 05.09.2019