Разница между датами из базы данных в другом месте и местным временем клиента

У меня есть требование игнорировать записи из БД, которые старше 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. Может быть, вы уже пробовали это?

Другие вопросы по тегам