将UTCTime转换为DateTime

时间:2015-12-09 13:49:49

标签: c++ oracle datetime utc

在旧的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中。如何将此信息转换为有意义的时间?

2 个答案:

答案 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)之间的秒数。