0、oracle的时间显示和你连接oracle的主机有着密切的关系,如果你用服务器本身去连接,那么显示的时间就是服务器时间,如果用远程主机去连接显示的时间就是远程主机的时间。
创新互联建站是一家集网站建设,清水河企业网站建设,清水河品牌网站建设,网站定制,清水河网站建设报价,网络营销,网络优化,清水河网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
1、出现了你补充说明的情况也恰恰说明oracle的时间显示和服务器的时区是没有关系的,我试验了一下(因为我的电脑安装了oracle服务器,我直接在我的电脑上实验的),修改我的电脑系统时区设置后,oracle的时间显示也跟着改变了。
2、所以建议你直接到你的两台服务器上实验一下,如果系统时区设置正确的话oracle的时间显示也是应该正确的。
3、但是当你远程连接oracle服务器的时候,oracle的时间显示出现问题,而不同的人用不同的机器连接又出现了不同的结果,这也恰好说明了当远程连接的时候oracle的时间显示和你的远程主机有很大的关系,你试着查找一下,连接显示正常和的人和链接显示不正常的人的主机的时区看看是不是一样的。或者找到他们机器的不一样的地方,如果能找到我相信你的问题会很顺利的解决。
4、有时候就是这样,我们想问题的时候如果认为是某一方面的问题,但是反复查找这方面的问题不可能存在的时候,就要适时的改变一下思路了。就比如你一直强调你的服务器的时区设置时正常的,但是时间还是显示不正确,那么说明就不是这个原因,换个方向也许就柳暗花明了。
---
以上,希望对你有所帮助。
时间戳的概念:它是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
下图是从linux系统中获得当前时间戳的一种方式
在oracle使用时间戳,一般都是为了方便计算时间差的,我们要知道oracle中的date类型想减是不能友好的得到时间的差值的。所以使用时间戳来得到两个时间差。
首先来看oracle中如何获得当前时间的时间戳,我们用当前时间减去计算机元年后再经过换算得到了的从1970年来到当前时间的时间戳,单位是微妙。
另外oracle提供了另一种便捷得到两个时间差的方式,那就是使用timestamp数据类型,它类似date类型,但是存储的时间更为精确,显示的格式:yyyy-mm-dd hh24:mi:ss.ff AM,其中ff是小数秒。
timestamp类型的时间差可读性也比上面那种好一些,可以直观看出两个时间差。
在oracle中,两个date类型的数值想减也可以转换成上述的timestamp可以的类型,这里就要介绍一个函数:numtodsinterval(n,'x'),它能将一个数值转换成timestamp那种格式的数据。但要注意:后面的参数'x'是取'day'、'minute'、'hour'完全取决于前面的单位,这样才能获得正确的时间差
最后我们介绍一个函数extract,该函数可以从timestamp类型的时间里抽取想要hour,minute等
这个和数据库安装的时候选择的时区有关,一般国内安装都是选择北京时区。
查看timestamp
select current_timestamp,systimestamp from dual;
current_timestamp systimestamp
12-12月-18 04.24.02.427990 下午 +08:00 12-12月-18 04.24.02.427980 下午 +08:00
查看时区
select dbtimezone,sessiontimezone from dual;
dbtimezone sessiontimezone
+00:00 +08:00
对于显示是12小时制这个问题,和客户端的操作系统有关,与实际存储的数据无关。
如果想显示成24小时制,修改客户端操作系统的环境变量可以达到目的:
NLS_TIMESTAMP_FORMAT
YYYY-MM-DD HH24:MI:SS:FF6
按照上图设置后,重启plsql,查询后我们能看到时间显示成“2018-12-12 16:16:35:877000”这样的格式了。
但是,如果建库时,时间设置错误或者是将来要改变时区时,表中的值会不会变化呢?因此引用官方的回答:
对于time zone数据类型的数据,即使你更新了数据库时区,原数据也不会进行对应调整,只能你导出数据,然后调整数据库时区,再把原始数据导入即可。所以,一般情况下,一定不要调整数据库时区。官方建议数据库时间采用UTC,因为这种时区性能好。如果没有显式指定数据库时区,数据库会使用操作系统的时区,但是如果操作系统时区不是一个合理的数据库时区,数据库则会使用默认的时区UTC,且UTC的取值范围为-12:00 to +14:00。等等,为什么会有+14?百度一下基里巴斯。这是一个神奇的网站国度。