我是一个PL/SQL新手,需要将unix时代以来的千秒转换为日期/时间。我可以转换为GMT日期/时间,但不知道如何调整时区。我很接近,但不太接近。
我的输入是r\u msg。OriginationTime,其值类似于138255210277
这个
MpD NUMBER := (1/24/60/60/1000); -- Milleseconds per Day
DFmt24 VARCHAR2(21) := 'MM/DD/YYYY HH24:MI:SS'; -- Date format
TMPorig24 VARCHAR2(20);
. . .
TMPorig24 := TO_CHAR( DATE '1970-01-01' + MpD * r_msg.OriginationTime, DFmt24);
给出了类似的东西
10/23/2013 18:15:00
这正是我想要的,除了格林威治标准时间。
这
TimeZoneOffset VARCHAR(7);
. . .
TimeZoneOffset := tz_offset('America/New_York' );
给予
-04:00
所以我只需要做一些
TMPorig24 := TMPorig24 + TimeZoneOffset;
但我知道
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
我试过几种变体,但都不管用。
感谢您的帮助。
谢谢,但我对这两种解决方案有疑问。
第一个解决方案打印的时间与时区无关。例如,这些打印相同的值。
TMPorig:=至\u CHAR(从\u TZ(演员阵容(日期‘1970-01-01’(1/24/60/60/1000)*r\u消息。“起始时间(作为时间戳)”,“美国/纽约”),“MM/DD/YYYY HH24:MI:SS”);
TMPorig2:=至\u CHAR(自\u TZ(演员阵容(日期‘1970-01-01’(1/24/60/60/1000)*r\u消息。“起始时间(作为时间戳)”,“太平洋/帕果岛”),“MM/DD/YYYY HH24:MI:SS”);
第二种解决方案
TMPorig:=TO_CHAR(DATE'1970-01-01'(1/24/60/60/1000)*r_msg。发起时间间隔'-04:00'小时到分钟,'MM/DD/YYYY HH24: MI: SS');
给予
PLS-00166: bad format for date, time, timestamp or interval literal
当夏令时结束时,“04:00”将是错误的。我需要一个表示EST/EDT和GMT之间时间差的表达式。
*********很好用谢谢**************
TMPorig2:=至\u CHAR(自\u TZ(演员阵容(日期‘1970-01-01’(1/24/60/60/1000)*r\u消息。“美国/纽约”、“YYYY年/月/日HH24:MI:SS”时区的“起始时间”(时间戳)、“UTC”);
编辑:确定,改为尝试此解决方案:
SELECT
TO_CHAR (
FROM_TZ (
CAST (DATE '1970-01-01' + (1/24/60/60/1000) * 1382552100277 AS TIMESTAMP),
'UTC')
AT TIME ZONE 'America/New_York',
'MM/DD/YYYY HH24:MI:SS') val
FROM dual;
输出:
VAL ------------------- 10/23/2013 14:15:00
您必须将DATE
转换为TIMESTAMP
,并使用FROM_TZ
函数将TIMESTAMP
转换为TIMESTAMP AND TIME ZONE
数据类型。时区参数可以是以下两种格式之一:America/New_York
或-04:00
。
SELECT
TO_CHAR(
FROM_TZ(
CAST(DATE '1970-01-01' + (1/24/60/60/1000) * 1382552100277 AS TIMESTAMP),
'America/New_York'),
'MM/DD/YYYY HH24:MI:SS')
FROM dual;
也就是说,如果您想要有一个带有时区变量的时间戳。如果要添加与给定时区的偏移,则可以使用:
SELECT
TO_CHAR(
DATE '1970-01-01' + (1/24/60/60/1000) * 1382552100277 + INTERVAL '-04:00' HOUR TO MINUTE,
'MM/DD/YYYY HH24:MI:SS') AS val
FROM dual;
输出:
VAL ------------------- 10/23/2013 14:15:00
问题内容: 在pandas数据框中有一个datetime列,其值如下: 我想知道如何舍入这些值,摆脱毫秒,仅将日期,小时,分钟和00表示为秒,如下所示: 问题答案: 使用与用于分钟设置: 我想将时间值更改为下一个值:
上下文是,我们的产品中有一个现有的应用程序,它生成并向现有的oracle过程发送纪元号&反之亦然。它在该过程中使用如下内容 当我尝试这些查询时,它对我也适用于Oracle10g服务器(如果有关系的话,还有Oracle sql Developer4.x)。 在现有的过程中,要求将值保存为日期本身(时间组件与日期无关),但是在新的要求中,我必须将unix EPOCH值转换为日期时间(小时/分钟/秒级别
我试图编写一个SQL表达式,该表达式将在特定时区将unix历元(1970/1/1以来的秒)转换为本地时间,并从中提取小时值。在研究了这段时间的解决方案后,我仍然不确定如何处理时区。注意,我尽量避免使用NEW_TIME()函数,因为它只使用时区缩略词的有限子集,而不使用全时区名称。 结果是 结果有几个问题 第1列:从时间戳开始,该值比使用日期关闭1小时 第2列:在America/los_Angele
目前我正在逐行读取数据文件。每行都有一个时间戳,格式为dd/MM/yyyy HH: mm: ss“我需要将其转换为自纪元以来的毫秒。我尝试了两种方法 1个 2. 在分析之后,我发现方法一的成本非常高,而方法二的成本比第一种低一些,但仍然很高。第一个需要大约1600ms的CPU时间,第二个需要1100ms的CPU时间。 问题- 1个 2. 谢谢 ** ** 好啊在这里添加更多细节。测试运行了1000
问题内容: 我想以毫秒为单位,仅包含年,月和日期的当前日期。但是当我使用此代码时: 我仍然以毫秒为单位获取时间。我怎样才能解决这个问题? 问题答案: 请注意日历的时区。
我将MSSTAMP作为Oracle中的“毫秒时间戳”,格式:1483228800000。如何将该毫秒时间戳转换为日期格式“YYYY-MM”,以便计算前几年每月完成的行数。 我已经尝试了TO_DATE、CAST、TO_CHAR的不同变体——但我无法做到这一点。