在旧的c ++源文件中,我有一段代码,其中读取了UTC时间。
/* current time as UTCTime */
UTCTime = aux_current_UTCTime();
我不知道aux_current_UTCTime会发生什么!但结果看起来像这样:
010228092133或110209104849或000204091613等...
我尝试过这样的东西来阅读它,但没有真正有意义的结果:
CREATE OR REPLACE FUNCTION unix_ts_to_date (p_unix_ts IN NUMBER)
RETURN DATE
IS
l_date DATE;
BEGIN
l_date := DATE '1970-01-01' + p_unix_ts / 60 / 60 / 24;
RETURN l_date;
END;
/
结果以字符串形式保存在Oracle中。如何将此信息转换为有意义的时间?
答案 0 :(得分:0)
很难确定,但有两种可能性可以想到:
字符串是YYMMDDHHMMSS,所以你只需要适当地拆分它(因为它是一个字符串)。您可以查看是否有任何日期违反日期规则,如分钟或秒数&gt; 59,月份大于12等。你还必须弄清楚这个世纪应该是什么(例如,如果YY <70,那么世纪是20世纪,否则世纪是19)。如果转换的日期都没有违反日期规则,那么我猜这是你的格式。
字符串是自1970-01-01以来的厘秒(这似乎不太可能)。
答案 1 :(得分:0)
CREATE OR REPLACE FUNCTION UNIX_TS_TO_DATE(P_UNIX_TS IN NUMBER) RETURN DATE IS
L_DATE DATE;
BEGIN
SELECT TO_DATE('1970-01-01', 'YYYY-MM-DD') +
NUMTODSINTERVAL(P_UNIX_TS, 'SECOND')
INTO L_DATE
FROM DUAL;
RETURN L_DATE;
END;
这个大数字看起来像Unix时间戳,它只是特定日期和Unix Epoch(1970年1月1日UTC)之间的秒数。