在 Oracle 中将 LONG 转换为时间戳 [重复]
Posted
技术标签:
【中文标题】在 Oracle 中将 LONG 转换为时间戳 [重复]【英文标题】:Conversion of LONG to Timestamp in Oracle [duplicate] 【发布时间】:2021-12-06 23:16:40 【问题描述】:我有一个数据源以 LONG 整数格式发送 TIMESTAMP 数据,我们必须在 Oracle 中将其转换为 TIMESTAMP。我可以很容易地在 JAVA 中做到这一点。但是,我不确定如何在 ORACLE 中实现这一点。 TO_TIMESTAMP 给出了无效的月份错误。
Sample data - 1636070400000
Java sn-p
import java.sql.Timestamp;
public class MyClass
public static void main(String args[])
long timeStamp = 1636070400000L;
Timestamp stamp = new Timestamp(timeStamp);
System.out.println("Timestamp is "+stamp);
sn-p 以上返回 - 2021-11-05 00:00:00.0
我希望在 SQL 中以类似格式输出以进一步操作数据 (YYYY-MM-DD HH24:MI:SS)。
【问题讨论】:
【参考方案1】:这个值似乎是 Java/javascript 时间戳,即从 1970-01-01 开始的毫秒数。试试这个:
SELECT TIMESTAMP '1970-01-01 00:00:00 UTC' + 1636070400000/1000 * INTERVAL '1' SECOND
FROM dual;
它返回 UTC 时间。如果您想获取当地时间,请使用
SELECT (TIMESTAMP '1970-01-01 00:00:00 UTC' + 1636070400000/1000 * INTERVAL '1' SECOND) AT LOCAL
FROM dual;
或
SELECT (TIMESTAMP '1970-01-01 00:00:00 UTC' + 1636070400000/1000 * INTERVAL '1' SECOND) AT 'Europe/Zurich'
FROM dual;
你也可以用NUMTODSINTERVAL(1636070400000/1000, 'second')
代替INTERVAL
字面量
【讨论】:
这是我当前使用的工作代码:to_date('01/01/1970','dd/mm/yyyy') + (1636070400000 / (1000 * 60 * 60 * 24)) @AliFidanli 这也很好。但是,结果以 UTC 时间给出。如果您想获取当地时间,那么结果是错误的。通过使用TO_DATE
,您还可以减少可能需要的小数秒。
完全同意。只是想在看到问题时分享它:)以上是关于在 Oracle 中将 LONG 转换为时间戳 [重复]的主要内容,如果未能解决你的问题,请参考以下文章