当前位置: 首页 > news >正文

Oracle 时区详解

1 简介

由于地球经纬度及地球自转引起的经度方向,不同的经度的地方,所感受到的昼夜是不同 的。有关国际会议决定将地球表面按经线从东到西,每隔经度15度划分一个时区,并且规定 相邻区域的时间相差1小时。

这就是时区的由来。

而实际使用中,往往不是严格按照这个标准来做的。国家的存在,为了行政工作的方便,一 个国家都有一个本国的标准时,大部分国家以首都所在的时区作为国家的标准时。比如, 我大中国以北京所在时区(东八区)作为中国的标准时。在IT领域,很多时候我们都会涉及 到时区的问题。很不幸的是,很多计算机方面的标准都是西欧、北美这些发达国家定制 的.比如东八区的时区名,并不是Beijing,而是Shanghai,当然,完整的时区名应该是 “Asia/Shanghai”.

1884年在华盛顿召开的国际经度会议决定以经过格林尼治的经线为本初子午线,是世界计 算时间和地理经度的起点,也是世界标准时,又称其为格林尼治标准时, 其时区名为 UT. 而由于世界原子时(纳秒为基础)与世界时(毫秒为基础)的计算单位不同,两者之间的差别会 越来越大,各政府更倾向于以自然时间UT为标准,因此世界原子时需要向世界时靠拢,于 1972年,世界上达成一致解决方案即为:协调世界时,即UTC。随后UTC,即成为了各个领 域特别是IT行业的时间标准。

而UTC的由来,不过是国力强弱之争妥协的产物。英文(CUT)和法文(TUC)的缩写不同, 作为妥协,简称UTC。

很多同仁在工作时,不会特别关注时区问题,即使用默认的时间配置,而在处理实际数据 的时候才发现,操作时间或者系统显示时间与本地时间相差了几个小时,在我大中国,一 般就是相差8个小时。只要你遇到了反馈时间与实际时间相差8个小时的情况,你就往时区 方面去考虑,这个方向基本上是正确的。

2 Oracle TimeZone

2.1 时区文件

Oracle 将支持的时区信息,比如时区名,时区缩写名都保存在文件中。文件的默认存储 路径为$ORACLE_HOME/oracore/zoneinfo/ 及其子路径中(big和little). 这些路径中中的 同名文件,其实是一样的。都是二进制文件,但是从文件大小来看,可以判断,同名文件 虽然在不同的路径中,但是文件内容是一样的。

文件的内容,在数据库启动时,会自动加载,并呈现在视图"V$TIMEZONE_FILE" 中,告知我 们, 数据库现在使用的是哪个文件。

文件分为两种类型:timezlrg_version.dat和timezone_version.dat .

2.2 时区名字

关于Oracle支持的时区,基本上涵盖了已知的常用的时区。

数据库启动时通过文件加载的内容,呈现在视图:V$TIMEZONE_NAMES 中。

SQL> col tzname for a20
SQL> col tzabbrev for a10
SQL> select * from V$TIMEZONE_NAMES where tzname = 'Asia/Shanghai';TZNAME               TZABBREV       CON_ID
-------------------- ---------- ----------
Asia/Shanghai        LMT                 0
Asia/Shanghai        CST                 0
Asia/Shanghai        CDT                 0

可以看到查到了三个值:

  • LMT(Local Mean Time) :全球标准时间,UTC的前身, 这个基本不用了。
  • CST(China Standard Time) :中国标准时间, 有其他的解释
  • CDT(Central Daylight Time):中部夏令时间,主要用于北美,比UTC晚5小时。另外,还可以理解成(Cuba Daylight Time)古巴夏令时。

更多的时区查询可以去:https://datetime360.com/cn/worldwide-city-list/ 查询。

由于缩写中有很多同名的,为了避免冲突,我们一般使用全名。

3.Oracle 时区设置

Oracle 的时区可以分为两种,一种是数据库的时区,一种是 session 时区,也就是客户端连接时的时区。

数据库的时区在创建数据库时可以通过在 create database 语句中加上 SET TIME_ZONE = ’ { { + | - } hh : mi | time_zone_region } ’ 来指定,如果,不指定,默认是按照数据库所在的操作系统时区来设定的。

--创建数据库时指定时区CREATE DATABASE databasename SET TIME_ZONE='Asia/Shanghai';

创建之后,可以通过 alter database 来修改。其中 time_zone_region 参数可以通过查询 V$TIMEZONE_NAMES 动态视图来获得所有支持的值。修改之后,需要重启数据库才能生效。

Session 的时区是根据客户端的时区来决定的,当然连接以后也可以通过 alter session 来改变。WITH LOCAL TIME ZONE 类型会根据 TIME_ZONE 的设置,自动把时间转换为 session 所在时区的时间显示出来,而 WITH TIME ZONE 因为保存了时区,不需要根据 TIME_ZONE 的设置来转换。

3.1 查看时区

可以分别使用 SESSIONTIMEZONE / DBTIMEZONE 内建函数查看 session 和数据库时区:
查看会话时区:

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

查看数据库时区:

SQL> select dbtimezone from dual;DBTIME
------
+08:00

SELECT property_name, property_value
FROM database_properties
WHERE property_name='DBTIMEZONE';

SELECT name, value$
FROM sys.props$
WHERE name='DBTIMEZONE';

3.2 调整时区

调整会话时区:

(1)SQL 命令

---示例ALTER SESSION SET TIME_ZONE = local;ALTER SESSION SET TIME_ZONE = dbtimezone;ALTER SESSION SET TIME_ZONE = '+08:00';ALTER SESSION SET TIME_ZONE = 'Asia/Shanghai';

(2)环境变量

$ ORA_SDTZ='-05:00'
$ export ORA_SDTZ

调整数据库时区(需要重启数据库)

--示例ALTER DATABASE SET TIME_ZONE = '-05:00';ALTER DATABASE SET TIME_ZONE = 'Europe/Lisbon';

修改数据库时区时可能会遇到如下报错:

SQL> alter database set time_zone='+06:00';
alter database set time_zone='+06:00'
*
ERROR at line 1:
ORA-02231: missing or invalid option to ALTER DATABASE

TOM 对此问题有过解释,TIME_ZONE 的设定主要是为了 WITH LOCAL TIME ZONE,当 session 的时区和数据库的时区不同时,oracle 根据时区的差距转换到数据库的时间,再保存到数据库的 WITH LOCAL TIME ZONE 类型中,他是不保存时区的,所以需要 TIME_ZONE 来进行各种时区之间时间的转换(WITH TIME ZONE 类型保存了原始的时区,所以不需要 TIME_ZONE 的设置也可以进行各种时区之间的转换)。但数据库中一旦有了该类型,就不能通过 alter database 修改时区了,会得到上面的错误,可以通过下面的语句获得所有包含该类型的表,将他们删除之后,再修改。

select u.name || '.' || o.name || '.' || c.name TSLTZcolumnfrom sys.obj$ o, sys.col$ c, sys.user$ u
where c.type# = 231and o.obj# = c.obj#and u.user# = o.owner#;

一般查询后的结果为:OE.ORDERS.ORDER_DATE,指的是OE用户下的ORDERS表的ORDER_DATE字段使用了时区的信息:WITH LOCAL TIME ZONE,将此信息去掉就可以再修改了,修改好了之后需要重启数据库才能生效。

更多内容可参考文章《oracle DBTIMEZONE 时区调整》

3.3 查询在指定时区的当地时间

SQL> SELECT TZ_OFFSET('Asia/Shanghai') FROM DUAL;TZ_OFFS
-------
+08:00SQL> SELECT TZ_OFFSET('Europe/London') FROM DUAL;TZ_OFFS
-------
+01:00

3.4 查询某时区和 UTC 之间的差值。

TZ_OFFSET ( { ‘time_zone_name’
| ‘{ + | - } hh : mi’
| SESSIONTIMEZONE
| DBTMEZONE }
)

SQL> SELECT TZ_OFFSET('US/Eastern') FROM DUAL;TZ_OFFS
-------
-04:00SQL>  SELECT TZ_OFFSET(DBTIMEZONE) FROM DUAL;TZ_OFFS
-------
+08:00

其中 time_zone_name 也可以从 V$TIMEZONE_NAMES 获得。

4. Oracle 时间函数

Oracle 9i 开始多了 3 个关于时间的数据类型:

  • TIMESTAMP [(precision)]
  • TIMESTAMP [(precision)] WITH TIME ZONE
  • TIMESTAMP [(precision)] WITH LOCAL TIME ZONE

其中 TIMESTAMP [(precision)] WITH TIME ZONE 保存了时区信息。

sysdate/systimestamp 都是返回数据库的时间并且使用数据库的时区,他们返回的是操作系统的时间。

  • sysdate 返回的是 date 类型,没有时区信息,操作系统上是什么时间就返回什么时间;
  • systimestamp 返回 TIMESTAMP WITH TIME ZONE 类型,有时区信息。
SQL> select sysdate from dual;SYSDATE
---------
25-AUG-23SQL>  select systimestamp from dual;SYSTIMESTAMP
---------------------------------------------------------------------------
25-AUG-23 11.38.48.569294 AM +08:00

参考文章:
https://www.cnblogs.com/firstyi/archive/2007/09/24/903931.html
https://www.cnblogs.com/halberd-lee/p/11245549.html
https://my.oschina.net/lvkun0223/blog/14438?p=

相关文章:

Oracle 时区详解

1 简介 由于地球经纬度及地球自转引起的经度方向,不同的经度的地方,所感受到的昼夜是不同 的。有关国际会议决定将地球表面按经线从东到西,每隔经度15度划分一个时区,并且规定 相邻区域的时间相差1小时。 这就是时区的由来。 而实际使用中&#xff0c…...

仿mudou高性能高并发服务器

"这个结局是我的期待,我会一直为你祝福。" 项目实现目标: 仿muduo库One Thread One Loop式主从Reacto模型实现高并发服务器。通过实现高并发服务器组件,简洁快速完成搭建一个高性能服务器。并且,通过组件内提供的不同应⽤层协议⽀…...

vue权限管理——菜单权限设置

1.前提:后端提供菜单对应数据 此处用mockjs模拟 const menuList [{id: 1, path:/uploadSpec,authName: "上传spec", icon: User, children:[], rights:[view,add,edit,delete]},{id: 2, path:/showSpec, authName: "Spec预览", icon: DataAn…...

【LeetCode】228.汇总区间

题目 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b]…...

Qt快速学习(二)--QMainWindow,对话框,布局管理器,常用控件

目录 1 QMainWindow 1.1 菜单栏 1.2 工具栏 1.3 状态栏 1.4 铆接部件 1.5 核心部件(中心部件) 1.6 资源文件 2 对话框QDialog 2.1 基本概念 2.2 标准对话框 2.3 自定义消息框 2.4 消息对话框 2.5 标准文件对话框 3 布局管理器 3.1 系统…...

群晖DSM下套件及系统网页服务器ssl证书自动更新

关键字: DSM ssl 证书 起因 群晖下自建服务(alist3)和系统服务在外部网络访问需要加ssl安全证书来实现基础的传输保护。 申请证书和续期手动操作都还好,不算太麻烦,但是每个应用单独证书需要复制和重启,再配合服务重启一套下来就…...

【Flink】Flink架构及组件

我们学习大数据知识的时候,需要知道大数据组件如何安装以及架构组件,这将帮助我们更好的了解大数据组件 对于大数据Flink,架构图图下: 整个架构图有三种关键组件 1、Client:负责作业的提交。调用程序的 main 方法&am…...

React Navigation 开发准备

需要 React Native 使用 React Navigation 的话,我们需要首先安装如下几个包: npm install react-navigation/native npm install react-native-screens react-native-safe-area-context开发之前做一些处理 如果您使用的是 Mac 并针对 iOS 进行开发&am…...

前端面试:【前端安全】安全性问题与防范措施

嗨,亲爱的前端开发者!在构建Web应用程序时,确保安全性是至关重要的。本文将深入讨论前端开发中的安全性问题,并提供一些防范措施,以确保你的应用程序和用户数据的安全性。 前端安全性问题: 跨站脚本攻击&am…...

[Linux]进程

文章目录 1. 进程控制1.1 进程概述1.1.1 并行和并发1.1.2 PCB1.1.4 进程状态1.1.5 进程命令 1.2 进程创建1.2.1 函数1.2.2 fork() 剖析 1.3 父子进程1.3.1 进程执行位置1.3.2 循环创建子进程1.3.3 终端显示问题1.3.4 进程数数 1.4 execl和execlp函数1.4.1 execl()1.4.2 execlp(…...

01-jupyter notebook的使用方法

一、Tab补全 在shell中输入表达式,按下Tab,会搜索已输入变量(对象、函数等等)的命名空间: 除了补全命名、对象和模块属性,Tab还可以补全其它的。当输入看似文件路径时 (即使是Python字符串&…...

pytestx容器化执行引擎

系统架构 前端、后端、pytest均以Docker容器运行服务,单独的容器化执行引擎,项目环境隔离,即用即取,用完即齐,简单,高效。 前端容器:页面交互,请求后端,展示HTML报告 后…...

(动态规划) 剑指 Offer 42. 连续子数组的最大和 ——【Leetcode每日一题】

❓ 剑指 Offer 42. 连续子数组的最大和 难度:简单 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为 O(n)。 示例1: 输入: nums [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1…...

OLED透明屏曲面技术:创新突破引领显示行业未来

OLED透明屏曲面技术作为一项重要的显示技术创新,正在成为显示行业的焦点,其引人注目的优势和广泛应用领域使其备受关注。 本文将详细介绍OLED透明屏曲面技术的优势、应用领域以及市场前景,同时展望其未来的发展趋势,以期带给读者…...

视频云存储/安防监控EasyCVR视频汇聚平台分发rtsp流时,出现“用户已过期”提示该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…...

调用paddleocr接口实现文本检测与识别,并在图像中显示识别结果

目录 一、按照官网步骤安装paddlepaddle和paddleocr(paddlepaddle我安装的是cpu版本) 二、运行下面的脚本 三、图像结果 一、按照官网步骤安装paddlepaddle和paddleocr(paddlepaddle我安装的是cpu版本) doc/doc_ch/quickstart.md PaddlePaddle/PaddleOCR - Gitee.com 二、…...

如何提升winform程序性能

提升WinForms程序性能是一个关键的优化任务,以下是一些可以帮助你提升性能的方法: 1. **UI延迟加载:** 如果你的WinForms界面很复杂,可以考虑将不必要的UI元素延迟加载,只在需要时加载,以减少启动时间和内…...

按钮权限控制

搜索关键字&#xff1a; 自定义指令传参| "自定义指令""dataset"|自定义指令dataset| "Vue""directives"|vue按钮权限实现 1、完整代码&#xff1a; <template> <div> <el-breadcrumb separator-class"el-icon…...

【脚本式设置环境变量】

在linux系统中&#xff0c;如果我打开一个软件需要如下操作&#xff0c;那将会是一件很麻烦的事情 cd dir #软件的文件路径 conda deactivate conda activate chatgpt python main.py【首先写一个chatgpt.sh脚本内容如下】 #!/bin/bash cd dir conda run -n chatgpt python m…...

软件开发bug问题跟踪与管理

一、Redmine 项目管理和缺陷跟踪工具 官网&#xff1a;https://www.redmine.org/ Redmine 是一个开源的、基于 Web 的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示&#xff0c;同时它又支持多项目管理。Redmine 是一个自由开源软件解决方案&#xff0c;…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...