oracle 时区

AST 大西洋标准时
ADT 大西洋夏令时
BST 白令标准时
BDT 白令夏令时
CST 中央标准时
CDT 中央夏令时
EST 东部标准时
EDT 东部夏令时
GMT 格林威治平均时
HST 阿拉斯加夏威夷标准时
HDT 阿拉斯加夏威夷夏令时
MST Mountain标准时
MDT Mountain夏令时
NST 纽芬兰标准时
PST 太平洋标准时
PDT 太平洋夏令时
YST YuKon标准时
YDT YuKon夏令时

使用 DBTimeZone 察看数据库所在的时区

SQL> select dbtimezone from dual;

DBTIMEZONE

----------

+08:00

找2个典型的美国时区

SQL> select tz_offset('US/Eastern'),tz_offset('US/Mountain') from dual;

TZ_OFFSET('US/EASTERN') TZ_OFFSET('US/MOUNTAIN')

----------------------- ------------------------

-05:00 -07:00

建立表,包含不同类型的三个column

create table tstz(ts timestamp, tstz timestamp with time zone, tsltz timestamp with local time zone);

insert into tstz values(systimestamp,systimestamp,systimestamp);

commit;


下面构造一个场景,用三个不同的时区的session来查询同样的数据

SQL>

SQL> alter session set NLS_TIMESTAMP_TZ_FORMAT = 'yyyy/mm/dd hh24:mi:ssxff TZH:TZM';

SQL> alter session set NLS_TIMESTAMP_FORMAT = 'yyyy/mm/dd hh24:mi:ssxff';

使用 SessionTimeZone 察看当前session的时区信息

SQL> select sessiontimezone from dual;

SESSIONTIMEZONE

---------------------------------------------------------------------------

+08:00

SQL> select * from tstz;

TS TSTZ TSLTZ +08:00

------------------------------------------------- ------------------------------------------------- -------------------------------------------------

2008/03/29 10:14:10.774754 2008/03/29 10:14:10.774754 +08:00 2008/03/29 10:14:10.774754

SQL> alter session set time_zone = 'US/Mountain';

SQL> select * from tstz;

TS TSTZ TSLTZ -07:00

------------------------------------------------- ------------------------------------------------- -------------------------------------------------

2008/03/29 10:14:10.774754 2008/03/29 10:14:10.774754 +08:00 2008/03/28 19:14:10.774754

SQL> alter session set time_zone = 'US/Eastern';

SQL> select * from tstz;

TS TSTZ TSLTZ -05:00

------------------------------------------------- ------------------------------------------------- -------------------------------------------------

2008/03/29 10:14:10.774754 2008/03/29 10:14:10.774754 +08:00 2008/03/28 21:14:10.774754

从 高亮部分可以发现

timestamp with time zone 保存了insert的时区, 并且不 论在什么地方查询,显示结果都是一致的

timestamp with local time zone 保存的是一个内部的时区信息, 在不同 时区进行查询,都会自动转换成当前时区进行显示。

因为修改了session的时 区信息,所以系统时区和当前session时区不同

SQL> select systimestamp, current_timestamp, localtimestamp from dual;

SYSTIMESTAMP CURRENT_TIMESTAMP LOCALTIMESTAMP

------------------------------------------------- ------------------------------------------------- -------------------------------------------------

2008/03/29 15:59:37.400640 +08:00 2008/03/29 02:59:37.400646 -05:00 2008/03/29 02:59:37.400646
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值