返回顶部
首页 > 资讯 > 数据库 >ORACLE 时间与时区(Time and Time Zone)
  • 738
分享到

ORACLE 时间与时区(Time and Time Zone)

2024-04-02 19:04:59 738人浏览 八月长安
摘要

转:https://www.2cto.com/database/201110/107435.html 一) oracle中的四种时间类型 Date Timestamp

转:https://www.2cto.com/database/201110/107435.html

一)


oracle中的四种时间类型

Date

Timestamp

Timestamp with local time zone

Timestamp with time zone

这四种类型中,前两个与时区完全无关,它们的“行为”就像varchar2或者number类型一样,就是你插入时是什么值,那么存储的也是一样的值,同时查询出来的也是一样的值(包括你在.net环境下用ADO.NET或者ODP.NET进行查询),不存在任何所谓的“参数”设置可以改变它们(当然,你可以改变它们的显示格式,但不是值)。

后两个类型则跟时区信息紧密相关,但它们之间又有较大的不同。timestamp with local time zone事实上并不存储时区信息,在向此类型的列中插入值时,用户提供时区信息,但是Oracle会自动将其转换成dbtimezone下的时间进行存储,所以,timestamp with local time zone有时区信息,即数据库时区,但它并不存储时区信息。当查询发生时,Oracle再将时间转化到客户端的时区(sessiontimezone)进行显示。

不同于timestamp with local time zone这种把时区的转换委托给Oracle服务器,timestamp with time zone则是单纯地把你在insert时提供的时间+时区信息保存到数据库中。


二)

两个与时区相关的参数

Dbtimezone

Sessiontimezone

--会话时区
select sessiontimezone from dual;
---数据库时区
select systimestamp from dual;
--time with zone
select dbtimezone from dual;

前者表示数据库时区,后者表示客户端时区。只有timestamp with local time zone才会受时区修改的影响。这两个参数都可以通过alter命令进行修改。

对客户端操作系统时区的修改将会影响此机器上的oracle客户端的sessiontimezone;修改服务器操作系统时区并不会改变dbtimezone。



sql> select dbtimezone from dual;
DBTIMEZONE
------------------------------
-06:00


SQL> select sessiontimezone from dual;
SESSIONTIMEZONE
------------------------------
+08:00



修改客户端或数据库时区的alter命令:

alter session set time_zone='+10:00'; 

alter database set time_zone='+10:00'; 

 

如果数据库中存在有timestamp with local time zone类型的 字段,则在修改dbtimezone时会出现ORA-30079: cannot alter database timezone when database has TIMESTAMP WITH LOCAL TIME ZONE columns


三)

如何向数据库插入一个timestamp with time zone或者timestamp with local time zone类型



SQL> create table tz1(twtz timestamp with time zone, twltz timestamp with local time zone);

SQL> insert into tz1 values(timestamp'2011-01-03 15:00:00.000000 +05:00',timestamp'2011-01-03 15:00:00.000000 +05:00');

SQL> select sessiontimezone from dual;
SESSIONTIMEZONE
---------------------------------------------------------------------------
+08:00

SQL> select * from tz1;
TWTZ                                    TWLTZ
---------------------------------------------------------------------------
03-JAN-11 03.00.00.000000 PM +05:00     03-JAN-11 06.00.00.000000 PM

SQL> alter session set time_zone='-06:00';

SQL> select * from tz1;
TWTZ                                    TWLTZ
---------------------------------------------------------------------------
03-JAN-11 03.00.00.000000 PM +05:00     03-JAN-11 04.00.00.000000 AM



除了采用类似“+05:00”这种形式的时区标识外,还可以使用时区的缩写,比如GMT,PST等等(可以查看系统视图 V$TIMEZONE_NAMES)。如果在insert时未给出时区信息,那么默认为当前客户端的时区。


四)

一些与时区相关的函数:


函数

返回值

返回值类型

SYSTIMESTAMP

Current date/time, in Database TZ

TIMESTAMP WITH TIME ZONE

CURRENT_TIMESTAMP

Current date/time, in Client Session TZ

TIMESTAMP WITH TIME ZONE

LOCALTIMESTAMP

Local date/time in Client Session, but with no TZ info

TIMESTAMP

DBTIMEZONE

Database time zone, in HH:MI offset from GMT

VARCHAR2

SESSIONTIMEZONE

Session time zone, in HH:MI offset from GMT

VARCHAR2

EXTRACT (part FROM date_time)

Extracts year, hour, seconds, time zone name, etc. from a supplied datetime or interval expression.

VARCHAR2

SYS_EXTRACT_UTC(date_time with TZ)

GMT (UTC) time of date/time supplied

TIMESTAMP

TZ_OFFSET(TZ)

Returns hour/minute offset from GMT of TZ

VARCHAR2

FROM_TZ(timestamp,TZ)

Converts a TIMESTAMP to TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH TIME ZONE

TO_TIMESTAMP

Convert char + fmt model to TIMESTAMP

TIMESTAMP

TO_TIMESTAMP_TZ

Convert char + fmt model to TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH TIME ZONE


五)

时区的基本换算

时区分东西,东时区都带+号标识,西时区用-号。在一个特定的时间点,时区号越大(考虑正负号)的地方,时间越晚,比如北京在+08:00区, St. Louis在-06:00区,北京已经是傍晚了,St. Louis还在凌晨,它们之前相差即+08:00-(-06:00)=14(受夏时制的影响,可能会有一个小时的误差)。


六)

应该选择哪种时间类型?

如果需要记录的时间精度超过秒,选择timestamp类型。

如果需要将时间在数据库时区与客户端时区之间进行自动转换,选择timestamp with local time zone。

如果需要记录客户插入的时区信息,选择timestamp with time zone。


七)

ODP.NET与OracleGlobalization

对于timestamp with time zone类型,由于包含了原始时区信息,所以应用程序中对其进行手动的转换也不困难。除了手动方法,我们还可以通过设置OracleGlobalization下的相关属性让ODP.NET为你进行自动转换。看一个例子:




conn.Open();//connection should be opened before SetSessionInfo() could be invoked.
//
OracleGlobalization og = OracleGlobalization.GetClientInfo();
og.TimeZone = "America/ChicaGo";
OracleGlobalization.SetThreadInfo(og);
conn.SetSessionInfo(og);
//
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select twtz from tz1";
OracleDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
    while (dr.Read())
    {
        OracleTimeStampTZ otstz = dr.GetOracleTimeStampTZ(dr.GetOrdinal("twtz"));
        Console.WriteLine("twtz: " + otstz.ToString());
    }
}
dr.Close();
//
//an alias is necessary when using 'AT LOCAL' predicate
cmd.CommandText = "select twtz AT LOCAL as twtz from tz1";
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
    while (dr.Read())
    {
        OracleTimeStampTZ otstz = dr.GetOracleTimeStampTZ(dr.GetOrdinal("twtz"));
        Console.WriteLine("twtz AT LOCAL: " + otstz.ToString());
    }
}
dr.Close();
 

//output:
twtz:                   03-JAN-11 03.00.00.000000 PM +05:00


twtz AT LOCAL:                        03-JAN-11 04.00.00.000000 AM AMERICA/CHICAGO


可以看到当设置了时区,并在sql语句中使用了‘AT LOCAL’后,原来的时间被自动转换到了芝加哥的时间(芝加哥在西6区,所以与原时间的时区东5区差为11小时)。

您可能感兴趣的文档:

--结束END--

本文标题: ORACLE 时间与时区(Time and Time Zone)

本文链接: https://lsjlt.com/news/45363.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ORACLE 时间与时区(Time and Time Zone)
    转:https://www.2cto.com/database/201110/107435.html 一) Oracle中的四种时间类型 Date Timestamp ...
    99+
    2024-04-02
  • ORA-39359: Source time zone version is string and target time zone version is string. ORACLE 报错 故障修复
    文档解释 ORA-39359: Source time zone version is string and target time zone version is string. Cause: The time zone version ...
    99+
    2023-11-05
    报错 故障 Source
  • ORA-39361: Source time zone is string and target time zone is string. ORACLE 报错 故障修复 远程处理
    文档解释 ORA-39361: Source time zone is string and target time zone is string. Cause: The time zone of the source database i...
    99+
    2023-11-05
    报错 故障 Source
  • python time时间,日期,时间
    1.将字符串的时间转换为时间戳    方法:        a = "2013-10-10 23:40:00"        将其转换为时间数组        import time        timeArray = time.strp...
    99+
    2023-01-31
    时间 日期 python
  • Python time库的时间时钟处理
    前言 time库运行访问多种类型的时钟,这些时钟用于不同的场景。本篇,将详细讲解time库的应用知识。 获取各种时钟 既然time库提供了多种类型的时钟。下面我们直接来获取这些时钟,对比其具体的用途。具体代码如下: ...
    99+
    2022-06-02
    Python time库时间时钟 Python time 时间 Python time 时钟
  • Python时间模块 time 解读
    Python  time模块解读,陆续更新常用模块 Epoch指的是一个特定的时间:1970-01-01 00:00:00 UTC。 1、time() -- return current time in seconds since the...
    99+
    2023-01-31
    模块 时间 Python
  • python时间模块time和datet
    通用时间格式:     1.时间戳(timestamp) import time   time.time()  1970年-目前     2.格式化的时间字符串     3.元组(struct_time)共九个元素         tim...
    99+
    2023-01-31
    模块 时间 python
  • Python 时间操作time详情
    目录1. time 概述2. 格式化时间字符串3. time 结构化4. time 相关方法5.实操6.总结前言: 我们在日常生活中,都离不开时间和日期。不仅我们的汉字都有大量描述时...
    99+
    2024-04-02
  • Python时间模块time()与datetime()怎么使用
    这篇“Python时间模块time()与datetime()怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Pytho...
    99+
    2023-06-29
  • Python time模块之时间戳与结构化时间的使用
    目录1. 时间戳1.1 time.time()1.2 时间戳 转 字符串2. 结构化时间2.1 本地时间2.2 格林威治时间(零时区)2.3 结构化时间 转 字符串2.4 字符串 转...
    99+
    2024-04-02
  • python常用时间库time、datetime与时间格式之间如何转换
    这篇“python常用时间库time、datetime与时间格式之间如何转换”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“p...
    99+
    2023-07-05
  • python的time模块时间戳与结构化时间如何使用
    这篇文章主要介绍了python的time模块时间戳与结构化时间如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python的time模块时间戳与结构化时间如何使用文章都会有所收获,下面我们一起来看看吧。t...
    99+
    2023-07-02
  • Python time模块之时间戳与结构化时间怎么使用
    本篇内容介绍了“Python time模块之时间戳与结构化时间怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!导入相关库im...
    99+
    2023-07-02
  • Python time三种时间转换小结
    目录复习回顾1. time模块源代码描述2. time模块核心对象3. 时间戳与结构化时间转换4. 字符串时间与结构化时间转换总结复习回顾 我们已经对Python内置模块-time中...
    99+
    2024-04-02
  • Python中时间操作time怎么用
    这篇文章主要介绍了Python中时间操作time怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. time 概述计算机网络时间是以UNIX元年1970年1月1日0点开...
    99+
    2023-06-21
  • python time 获取毫秒级时间戳
    1、time 获取秒级时间戳,格式化显示 import timets = time.time()print("time:", ts) # 原始时间数据,单位为秒# time.strptime 只支持到秒级别!dt = time.strft...
    99+
    2023-09-06
    python 开发语言
  • 怎么使用Pygame Time时间控制
    本篇内容主要讲解“怎么使用Pygame Time时间控制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Pygame Time时间控制”吧!pygame.time 时间控制模块,是 Pyg...
    99+
    2023-06-25
  • Python time时间格式化和设置时区的方法是什么
    这篇文章主要介绍“Python time时间格式化和设置时区的方法是什么”,在日常操作中,相信很多人在Python time时间格式化和设置时区的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希...
    99+
    2023-07-05
  • Python time时间格式化和设置时区实现代码详解
    目录1、时间戳转换为指定格式日期2、将字符串的时间转换为时间戳3、Datetime详细介绍4、获得三天前的时间的方法5、使用datetime模块来获取当前的日期和时间1、时间戳转换为...
    99+
    2023-02-25
    Python time时间格式化 Python time设置时区
  • python 包实现 time 时间管理操作
    目录一、当前时间戳二、获取当前时间字符串三、获取当前计算机时间格式四、格式化时间显示五、字符串转为计算机格式六、精确时间计数值七、休眠等待一、当前时间戳 获取当前时间戳,即当前系统内...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作