Посмотрите здесь для получения дополнительной информации
select epoch_time, extract(year from epoch_time) as year
from (
select date '1970-01-01' + 1291116794/86400 as epoch_time
from dual
)
Могут быть проблемы с часовыми поясами и т. Д., Поскольку я считаю, что время эпохи будет в UTC, но это за пределами моего понимания.
Кроме того, похоже, что ваше значение имеет длину 13 цифр, а не 10, так что, возможно, вам просто нужно добавить дополнительные нули, то есть разделить на 86400000, а не 86400.
РЕДАКТИРОВАТЬ: Как я сказал выше .... могут быть проблемы с часовым поясом. Похоже, что Java-код берет 1970-01-01 (в UTC, как и должно быть), добавляя смещение и преобразовывая его в местное время. Вам нужно будет сделать это и с запросом к базе данных.
Мне немного неясно, как Oracle обрабатывает часовые пояса, но после небольшого количества экспериментов я придумал следующие примеры
alter session set time_zone = 'Asia/Calcutta';
select
sessiontimezone,
to_char(to_date('01-JAN-1970','DD-MM-YYYY HH24:MI SS') +
( 1262284398000 / (1000*60 * 60 * 24) ) ,'YYYY'),
extract(year from cast(timestamp '1970-01-01 00:00:00 +00:00' at local +
numtodsinterval(1262284398000 / 1000, ' SECOND') as timestamp with time zone)),
to_char(timestamp '1970-01-01 00:00:00 +00:00' at local +
numtodsinterval(1262284398000 / 1000, ' SECOND'), 'YYYY'),
extract(year from cast(timestamp '1970-01-01 00:00:00 +00:00' at local +
numtodsinterval(1262284398000 / 1000, ' SECOND') as timestamp with local time
zone))
from dual;
В приведенном выше примере первые два столбца (после sessiontimezone) должны быть 2009, а последние два - 2010. Хотя это все только что было найдено в результате экспериментов, поэтому ваш пробег может отличаться.