我正在尝试将时间(日期+时间)从一个时区转换为另一个时区。在下面的查询中,我尝试将时间从 EST(“America/New_York”)转换为 PST(“America/Los_Angeles”)。查询部分有效;结果:
DATABASE_DATE = 2012-02-13 1:00:00 PM
LOCALTIME (what I get): 2012-02-12 10:00:00 AM.
所以时间是好的,但日期是错误的。应该是 2012-02-13 而不是 2012-02-12。
难道我做错了什么?这是我的查询:
select to_date( to_char( ( from_tz( to_timestamp( DATABASE_DATE
, 'YYYY-MM-DD HH:MI:SS')
,'America/New_York')
at time zone 'America/Los_Angeles')
,'YYYY-MM-DD HH:MI:SS')
,'YYYY-MM-DD HH:MI:SS') as localtime
from table
Thanks
to_timestamp() 获取一个字符串 (VARCHAR2, CHAR ...) 如果您尝试给它一个日期,那么 oracle 会根据 NLS_DATE_FORMAT 将其转换为字符串,这在不同的环境中可能会有所不同并返回意外的结果(如本例所示) 。
您应该做的是首先使用 to_char,因此您的查询可以如下所示:
select to_date(to_char((from_tz(to_timestamp(to_char(DATABASE_DATE, 'YYYY-MM-DD HH:MI:SS PM'), 'YYYY-MM-DD HH:MI:SS PM') ,'America/New_York')
at time zone 'America/Los_Angeles'),'YYYY-MM-DD HH:MI:SS PM'),'YYYY-MM-DD HH:MI:SS PM') as localtime
from table
UPDATE:如果我理解正确的话,那么你想要这样的东西:
select to_char((from_tz(to_timestamp(to_char(DATABASE_DATE, 'YYYY-MM-DD HH:MI:SS PM'), 'YYYY-MM-DD HH:MI:SS PM') ,'America/New_York')
at time zone 'America/Los_Angeles'),'YYYY-MM-DD HH:MI:SS PM TZD') as localtime
from table
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)