oracle:如何获取本地时间戳而不是服务器时间戳
Posted
技术标签:
【中文标题】oracle:如何获取本地时间戳而不是服务器时间戳【英文标题】:oracle: how to get the local timestamp insteadof the server timestamp 【发布时间】:2016-07-08 14:26:58 【问题描述】:假设我有一个表 foo,其中列 changed_colum 类型为 date。
现在我想从该列中获取本地时间戳,我尝试以下操作:
select TO_CHAR(cast (changed_colum as timestamp) at local, 'YYYY-MM-DD HH24:MI:SS TZR') from foo
result--->
2016-07-08 08:48:35 EUROPE/BERLIN
但这会打印应用程序服务器的日期。我需要会话的本地日期而不是服务器的本地日期。
有什么想法吗?
【问题讨论】:
由于changed_column
只是一个date
,显然它不包含时区信息。该列中的时间数据是如何解释的?是UTC吗?其他?换句话说,如果数据显示Jul 8th @ 5PM
,那就是5 PM
,在哪个时区?
【参考方案1】:
根据 Oracle 在以下位置的文档: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions079.htm#i999873
试试这个:
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;
或
这个:
SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL;
希望这会有所帮助。
【讨论】:
我需要一种从 created_colum 获取本地时间戳的方法。【参考方案2】:不清楚你在问什么......如果你知道日期都是“使用服务器时区”,那么你可以使用
from_tz(cast (changed_column as timestamp), dbtimezone) at time zone sessiontimezone
然后根据需要对其进行格式化。
【讨论】:
【参考方案3】:DATE
数据类型不包含任何时区信息。这些日期的时区是什么?除非您从应用程序的设计中不知道这一点,否则您无法转换。
AT LOCAL
等于AT TIME ZONE SESSIONTIMEZONE
,即您的应用程序服务器在登录时设置的时区(或由ALTER SESSION SET TIME ZONE = ...
设置)。如果您喜欢这个时区等于您的客户端的时区,那么您必须在应用程序服务器上对此进行编码。
【讨论】:
以上是关于oracle:如何获取本地时间戳而不是服务器时间戳的主要内容,如果未能解决你的问题,请参考以下文章
获取时间戳而不是日期时间对象,sqlalchemy python 2.7
为啥 pandas 在调用 pd.to_datetime() 时返回时间戳而不是 datetime 对象?