आप अपने टाइमस्टैम्प को टाइमज़ोन के साथ यूटीसी में बदल सकते हैं, और फिर उसमें से युग को घटा सकते हैं:
select timestamp '2018-10-19 09:12:47.0 AMERICA/DENVER'
- timestamp '1970-01-01 00:00:00.0 UTC' as diff
from dual;
जो आपको एक अंतराल डेटा प्रकार देता है:
DIFF
----------------------
+17823 15:12:47.000000
फिर आप उसमें से तत्वों को निकाल सकते हैं, और प्रत्येक तत्व को मिलीसेकंड में बदलने के लिए एक उपयुक्त कारक से गुणा कर सकते हैं (यानी दिनों के लिए, 60*60*24*1000); और फिर उन्हें एक साथ जोड़ें:
select extract(day from diff) * 86400000
+ extract(hour from diff) * 3600000
+ extract(minute from diff) * 60000
+ extract(second from diff) * 1000 as unixtime
from (
select timestamp '2018-10-19 09:12:47.0 AMERICA/DENVER'
- timestamp '1970-01-01 00:00:00.0 UTC' as diff
from dual
);
UNIXTIME
--------------------
1539961967000
यह मिलीसेकंड को भी सुरक्षित रखता है, अगर शुरुआती टाइमस्टैम्प उनके पास है (यह उन्हें संरक्षित करते हुए 'यूनिक्स' समय से परिवर्तित होता है):
select (timestamp '1970-01-01 00:00:00.0 UTC' + (1539961967567 * interval '0.001' second))
at time zone 'America/Denver' as denver_time
from dual;
DENVER_TIME
--------------------------------------------
2018-10-19 09:12:47.567000000 AMERICA/DENVER
फिर वापस कनवर्ट करने के लिए:
select extract(day from diff) * 86400000
+ extract(hour from diff) * 3600000
+ extract(minute from diff) * 60000
+ extract(second from diff) * 1000 as unixtime
from (
select timestamp '2018-10-19 09:12:47.567 AMERICA/DENVER'
- timestamp '1970-01-01 00:00:00.0 UTC' as diff
from dual
);
UNIXTIME
--------------------
1539961967567
यदि आपके शुरुआती टाइमस्टैम्प में उससे अधिक सटीकता है तो आपको गैर-पूर्णांक परिणाम से बचने के लिए (या गोल/मंजिल/छत/कास्ट) को छोटा करना होगा; यह संस्करण केवल निकाले गए मिलीसेकंड भाग को छोटा कर देता है:
select diff,
extract(day from diff) * 86400000
+ extract(hour from diff) * 3600000
+ extract(minute from diff) * 60000
+ trunc(extract(second from diff) * 1000) as unixtime
from (
select timestamp '2018-10-19 09:12:47.123456789 AMERICA/DENVER'
- timestamp '1970-01-01 00:00:00.0 UTC' as diff
from dual
);
DIFF UNIXTIME
------------------------- --------------------
+17823 15:12:47.123456789 1539961967123
उस छंटनी (या समकक्ष) के बिना आप 1539961967123.456789
के साथ समाप्त हो जाएंगे ।
मैं लीप सेकंड विसंगति के बारे में भूल गया था; यदि आप इसे संभालना चाहते/चाहते हैं, यह उत्तर देखें ।