搭建两个虚拟环境,操作系统均是cents7。

环境A:

使用timedatectl命令查看时区为 Time zone: Asia/Shanghai (CST, +0800)。

本地数据库时区(show timezone命令)为PRC,等价于cst。

环境B:

时区为America/New_York (EST, -0500),本地数据库时区为US/Eastern,等价于EST。

1. 先针对timestamp with time zone和timestamp without time zone两个配置进行测试。

在环境A的数据库建立数据表并写入数据:

CREAT TABLE test_timestamp(
ttz timestamp with time zone,
twtz timestamp without time zone
);
INSERT INTO test_timestamp VALUES (now(),now());

查看数据:

postgres=# table test_timestamp;
ttz | twtz
-------------------------------+----------------------------
2019-02-15 11:28:26.994804+08 | 2019-02-15 11:28:26.994804
(1 row)

在环境B中,使用python查看:

>>> data = pd.read_sql(''' select * from test_timestamp  ''', conn)
>>> data
ttz twtz
0 2019-02-15 03:28:26.994804+00:00 2019-02-15 11:28:26.994804
>>>

会发现ttz字段自动转换成了UTC时间,而twtz字段原封不动的输出。

再测试环境B写入数据:

本地时间为:$ date
Thu Feb 14 22:33:42 EST 2019
执行cur.execute(''' insert into test_timestamp values('2019-02-14 22:33:42','2019-02-14 22:33:42') ''')

在A的数据库中查看:

postgres=# table test_timestamp;
ttz | twtz
-------------------------------+----------------------------
2019-02-15 11:28:26.994804+08 | 2019-02-15 11:28:26.994804
2019-02-14 22:33:42+08 | 2019-02-14 22:33:42
(2 rows)

发现ttz字段日期值加上了环境A的时区,出现了偏差。因为插入语句用的是字符串类型,是的数据库默认为本地时区。

写入数据时如果调用sql函数:

cur.execute(''' insert into test_timestamp values(now(),now())  ''')

在环境A中:

postgres=# table test_timestamp;
ttz | twtz
-------------------------------+----------------------------
2019-02-15 11:28:26.994804+08 | 2019-02-15 11:28:26.994804
2019-02-14 22:33:42+08 | 2019-02-14 22:33:42
2019-02-15 11:41:13.080922+08 | 2019-02-15 11:41:13.080922
(3 rows)

插入的也是环境A的本地时间。也就是说,最后都是以数据库的环境来执行。

结论:

A. 同一时区内,没有差别。跨时区时,如果只是跨时区读(写操作由一个特定时区完成),可以看成是无差别,都需要转换一下,设置成with time zone可能会好一些,因为在读取的时候有些工具或语言(比如java)会自动转成当地时区的时间。如果是跨时区写,那么就要设置成without time zone,要不然数据库记录的时间会有错误,因为写的时候传的是字符串,数据库会加上本地时区。

B. 不同数据库时间类型的名称不一样,postgres里面没有datetime类型,用timestamp表示datetime;在mysql里有datetime类型,也有timestamp类型(含义和postgres里面不一样)。表示的范围大小、是不是带有时区信息也要查看具体数据库的手册。

C. postgres日期类型一般都是“YYYY-MM-DD HH:mm:ss”格式,不接受一般理解上的数字类型的时间戳(int型数值)的输入。时间类型(比如updatetime和tradedate等)的设置不一定得是数值格式,也可以是日期格式,只是需要注意好时区问题。

postgres10.2时区研究的更多相关文章

  1. tzwhere模块 根据经纬度判断时区

    先说一说这个问题的误区: 1: 根据地理常识,我们知道时区有24个,经度/15=商+余数,此时的商就是是时区,给大组长说了一下,不沾边 又过了几天 2:发现django自带的模块timezone,也叫 ...

  2. fastJSON☞JSONParameters☞时区的修改☞时间最后有一个"Z"

    why... 为什么会有这个问题; 由于近期用到需要将数据序列化... 最终选择了fastJSON(版本为1.)来实现. 但是发现了一个问题,表中有一个dateTime类型的字段, 本来数据库中存入的 ...

  3. Skyfree的毕业论文 《系统封装与部署的深入研究》

    Skyfree的毕业论文 <系统封装与部署的深入研究> https://www.itsk.com/thread-197-1-4.html Skyfree 发表于 2007-9-13 07: ...

  4. 查看/修改 Linux 时间和时区

    查看/修改Linux时区和时间 一.时区      1. 查看当前时区                 date -R      2. 修改设置时区          方法(1)            ...

  5. rtc关机闹钟5 AlarmManager研究

    AlarmManager研究 侯 亮 转自 http://blog.csdn.net/codefly/article/details/17058425 1.概述 在Android系统中,闹钟和唤醒功能 ...

  6. linux概念之时间与时区

    http://www.cnblogs.com/liuyou/archive/2012/07/29/2614338.html Linux时间基准 以上我们了解了RTC(实时时钟.硬件时钟)和OS时钟(系 ...

  7. 3. 深入研究 UCenter API 之 加密与解密(转载)

    1.  深入研究 UCenter API 之 开篇 (转载) 2.  深入研究 UCenter API 之 通讯原理(转载) 3.  深入研究 UCenter API 之 加密与解密(转载) 4.  ...

  8. CST时区,MYSQL与JAVA-WEB服务器时间相差13个小时的问题

    最近倒腾了一台阿里云主机,打算在上面装点自己的应用.使用docker安装了安装mysql后,发现数据库的存储的时间与java-web应用的时间差8个小时,初步怀疑是docker容器时区的问题.经过一系 ...

  9. 世界时区和Java时区详解

    0.引言 Druid中时区的问题一直困扰着我们,所以我专门去研究了一下世界时区和Java中的时区,对使用Druid很用帮助. 1.UTC时间&GMT时间 UTC时间是时间标准时间(Univer ...

随机推荐

  1. c# Socket通信基础

     一.IP地址操作类   1.IPAddress类 a.在该类中有一个 Parse()方法,可以把点分的十进制IP表示转化成IPAddress类,方法如下: IPAddress address = I ...

  2. CentOS oracle Client客户端安装

    CentOS客户端安装方法如下: 1.安装客户端 rpm -ivh /当前目录/oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm rpm - ...

  3. android系统自带图标

      android:src="@android:drawable/ic_media_rew"    

  4. 阅读笔记:Solving the “false positives” problem in fraud prediction

    刚读完一篇paper<Solving the “false positives” problem in fraud prediction>,趁热打铁,做个笔记. 文章下载链接:https: ...

  5. jQuery Ajax 全解析(转载)

    本文地址: jQuery Ajax 全解析 本文作者:QLeelulu 转载请标明出处! jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写Java ...

  6. 2.wireshark分析之TCP协议(一)

    (1) TCP是怎么样的协议? TCP是一种面向连接(连接导向)的.可靠的基于字节流的传输层通信协议.TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认.对失序的数据重新排 ...

  7. django的restfulapi

    Django Rest framework 的流程大概是这样的 建立 Models 依靠 Serialiers 将数据库取出的数据 Parse 为 API 的数据(可用于返回给客户端,也可用于浏览器显 ...

  8. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  9. MySQL创建索引命令

    MySQL索引类型 普通索引 创建索引的方式 -- 直接新建索引 CREATE INDEX indexName ON mytable(username(length)) -- 修改表结构新建索引 AL ...

  10. 1124 Raffle for Weibo Followers[简单]

    1124 Raffle for Weibo Followers(20 分) John got a full mark on PAT. He was so happy that he decided t ...