Разница между датами из базы данных в другом месте и местным временем клиента
У меня есть требование игнорировать записи из БД, которые старше 10 минут. Однако сервер БД находится в другом часовом поясе, чем сервер приложений. Я пытался использовать детали часового пояса из значения столбца timestamp, но кажется, что они не сохраняют данные часового пояса в этом значении столбца (плохой дизайн?). Тем не менее, я нашел способ получить эту информацию для экземпляра БД с помощью запроса:
select dbtimezone from dual.
Тем не менее, большинство реализаций в java поддерживают часовые пояса через имена, а не смещенную информацию. Мне нужно иметь возможность точно перевести это смещение во временную зону (EST и т. Д.), Чтобы я не мог пропустить время, связанное с DST, в моих расчетах. вот так:
TimeZone dbZone = TimeZone.getTimeZone(10000); // offset is +10000
Calendar cal = Calendar.getInstance(dbZone);
cal.setTime(new Date());
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(dbZone);
Date parsedDate = df.parse(df.format(cal.getTime()));
План состоит в том, чтобы преобразовать текущее время клиента / приложения в конкретное время часового пояса БД и выполнить разницу между ними.
Это не может быть сделано в запросе из-за некоторых ограничений. Пожалуйста, не просите меня написать запрос, чтобы получить последние записи и т. Д. Должно быть сделано на Java.
Какие-нибудь советы?
1 ответ
Я предполагаю, что это может привести вас в правильном направлении. Вы можете попробовать следующее, чтобы узнать смещение от EST и выполнить соответствующий расчет:
SELECT TZ_OFFSET('US/Eastern') FROM DUAL;
Таким образом, возврат -3:00 будет означать, что это время PST. Может быть, вы уже пробовали это?