怎样在Oracle 9i中正确的转换时区
来源:互联网 发布:知乎如何修改问题 编辑:程序博客网 时间:2024/05/18 01:08
很多人都知道,在Oracle 9i之前,虽然有一个NEW_TIME函数可以改变DATE的时间戳部分,但是还没有专门用来存储时区信息的数据类型。在Oracle9i中,我们可以使用DBTIMEZONE伪字段查询数据库的时区,使用SESSIONTIMEZONE伪字段查询会话的时区。
但是,对于大多数数据库,这些值都是-07:00之类的偏移值,因此对于NEW_TIME函数是没有用的。Oracle9i有关NEW_TIME的文档建议使用FROM_TZ来替代,但是这可能会产生误导。FROM_TZ只将一个时区应用到一个时间戳上;它并不能把一个时区转换成另外一个时区。
其实有一个比较好的方法(从文档中得到这个方法可能有点难)。首先,为了完成这个工作,在正确的时区内需要一个TIMESTAMP WITH ZONE数据类型。然后,如果你将关键字AT TIME ZONE应用到那个值,它就会自动地调整为新的时区和日期。
select (timestamp 2003-04-06 01:59:59 at time zone PDT)
at time zone GMT
from dual;
06-APR-03 08.59.59.00000000 AM GMT
这个语句将为太平洋白天时间(即其切换到PST之前的时刻)构造一个TIMESTAMP WITH TIME ZONE然后再将其转换到GMT。AT TIME ZONE关键字也接受默认的偏移值语法:
select (timestamp 2003-04-06 02:00:00
at time zone -07:00) at time zone
00:00 from dual;
06-APR-03 09.00.00.000000000 AM +00:00
你还可以使用伪字段来自动调整当前会话的时区:
selectcurrent_timestamp at time zone dbtimezone from dual;
上面的表达式返回一个当前会话的本地时间(数据类型为时区),重新调整数据库的时区,调整后的时区将与SYSTIMESTAMP的结果相等。
有了以上的这些信息,就可以构造一个比较好的NEW_TIME函数:
create or replace function my_new_time
(
p_dwtz timestamp with time zone,
p_tz varchar2
) return date
is
begin
return cast(p_dwtz at time zone p_tz as date);
end my_new_time;
/
show errors;
select my_new_time(sysdate,+08:00) from dual;
如果第一个参数被标记为一个timestamp with time zone,你可以传入一个TIMESTAMP和DATE,这样由于Oracle的自动转型操作,得到的时间将是会话在本地时区的当前时间。这个函数接受包括偏移值在内的任何可以被TIMESTAMP识别的时区,然后将接受的时区调整为正确的值。
上海阜和进修学校
- 怎样在Oracle 9i中正确的转换时区
- 怎样在windows中正确的使用PeekMessage
- Java 开发中时区的转换问题
- java中关于时区转换的方法
- Java中处理时区的转换
- Java中处理时区的转换
- Java中不同时区时间的转换
- 辛星解读PHP中设置正确的时区
- Oracle中sysdate的时区偏差
- oracle中关于时区的一些资料
- 在Oracle存储过程中正确的实现分页
- 在ASP.net中怎样判断是正确的日期格式
- 在iOS开发领域中,怎样才算是MVC划分的正确姿势?
- 怎样在C语言中正确的使用随机数函数rand
- 怎样在java代码中调用Oracle的存储过程
- 怎样在Nicelabel中正确导入excel数据?
- 在php中让用户自定义时区 正确显示当前时间
- 转换当前的时区到北京时区
- Red Hat Fuse/A-MQ - 小技巧,开发FUSE专案时的Maven的pom.xml中
- IdeaVim插件施用技巧
- leetcode - Remove Duplicates from Sorted Array
- python缺包笔记
- mysql加密
- 怎样在Oracle 9i中正确的转换时区
- php中的访问修饰符知识点
- VS2010下编译sqlite3
- Write operations are not allowed in read-only mode (FlushMode.MANUAL)
- 最近一年多所做项目和使用到的技术 (移动互联、智能电视)
- php中构造方法知识点
- Android java.lang.NoClassDefFoundError:
- Swift编程语言入门视频教程(十七)--世界杯竞猜程序(4)
- 黑马程序员---交通灯管理系统