PostGreSQL:时间戳时区问题

时间|日期类型

        PostGreSQL数据库内置的时间类型如下,注意到:内置的时间类型被分为了with time zone-带时区、without time zone-不带时区两种类型,

   timetimestampinterval都可以接受一个可选的精度值 p(取值:0-6),这个精度值声明在秒域中小数点之后保留的位数。缺省情况下,在精度上没有明确的边界。

时间|日期类型可接受的输入格式

        在实际使用中,对于一个时间类型,我们通常很关心如何为此种类型的字段做插入、更新操作,那么就要考虑:PostGreSQL可以接受什么样的输入格式?对于PGSQL来讲,日期和时间的输入可以接受几乎任何合理的格式,包括 ISO 8601、SQL-兼容的、传统POSTGRES的和其他的形式。

        如下表所示,PG官方推荐使用ISO 8601格式的时间、日期字符串输入。

时间戳:输入格式|当前时间

时间戳输入格式

        相比上面的部分,本文更加关心与时间戳相关的内容。

        时间戳类型的有效输入:由一个日期和时间的串接组成,后面跟着一个可选的时区,因此,以下两种输入都是有效的(都遵循ISO 8601标准),

1999-01-08 04:05:06
1999-01-08 04:05:06 -8:00

        SQL标准通过“+”或者“-”符号的存在以及时间后面的时区偏移来区分timestamp without time zonetimestamp with time zone文字。因此,根据标准,

        ①TIMESTAMP '2004-10-19 10:23:54':是一个timestamp without time zone;

   ②TIMESTAMP '2004-10-19 10:23:54+02':是一个timestamp with time zone。

获取当前时间戳     

         我们先来获取一个当前时间戳,PGSQL提供了以下两种方式来获取,

CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_TIME(precision)
CURRENT_TIMESTAMP(precision)
LOCALTIME
LOCALTIMESTAMP
LOCALTIME(precision)
LOCALTIMESTAMP(precision)

注意CURRENT前缀、LOCAL前缀函数之间的区别:

  CURRENT_TIMECURRENT_TIMESTAMP传递带有时区的值;

  LOCALTIMELOCALTIMESTAMP传递的值不带时区。

        接着看一下官方给的例子,

SELECT CURRENT_TIME;
结果:14:39:53.662522-05SELECT CURRENT_DATE;
结果:2001-12-23SELECT CURRENT_TIMESTAMP;
结果:2001-12-23 14:39:53.662522-05SELECT CURRENT_TIMESTAMP(2);
结果:2001-12-23 14:39:53.66-05SELECT LOCALTIMESTAMP;
结果:2001-12-23 14:39:53.662522

        以2023-09-09 11:16:56.745139+08为例,表示:2023年09月09日,上午11时16分56.745139秒,+08东八区。

时间|日期输出格式

        时间|日期格式化也是我们做项目开发、数据库操作避不开的一个问题,PostGreSQL的时间/日期类型的输出格式可以设成四种风格之一: ISO 8601、SQL(Ingres)、传统的POSTGRES(Unix的date格式)或 German 。缺省是ISO格式。

        以下为4种格式的例子,

        根据PG官方描述,实现数据格式化操作的方式有两种,

①日期/时间风格可以由用户使用SET datestyle命令选取,在postgresql.conf配置文件里的参数DateStyle设置或者在服务器或客户端的PGDATESTYLE环境变量里设置。

②格式化函数to_char(见第 9.8 节)也可以作为一个更灵活的方式来格式化日期/时间输出。

        我们来了解一下第②种。

数据类型格式化函数

        PostgreSQL格式化函数提供一套强大的工具用于把各种数据类型 (日期/时间、整数、浮点、数字) 转换成格式化的字符串以及反过来从格式化的字符串转换成 指定的数据类型。

        可以看到:通过格式化函数,可以实现时间戳和字符串之间的互转操作,而对于格式化字符串的format控制参数模板串,可参见:9.8. 数据类型格式化函数 (postgres.cn),表9.25.

        例如:我们要将当前时间戳转换为类似于:yyyy-MM-dd hh:mm:ss这样的字符串格式(24小时制),那么SQL语句为:


SELECT to_char(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS')--输出
2023-09-09 11:29:02

        接着,我们再将上面的输出字符串转换为时间戳,

SELECT to_timestamp('2023-09-09 11:29:02', 'YYYY-MM-DD HH24:MI:SS')--
2023-09-09 11:29:02+08

关于时区

        PG官方对于时区的问题解释如下,并不建议使用带时区的类型,

PostgreSQL努力在典型使用中与SQL标准的定义相兼容。但SQL标准在日期和时间类型和功能上有一些奇怪的混淆。两个显而易见的问题是:

  • 尽管date类型与时区没有联系,而time类型却可以有。 然而,现实世界的时区只有在与时间和日期都关联时才有意义, 因为偏移(时差)可能因为实行类似夏时制这样的制度而在一年里有所变化。

  • 缺省的时区会指定一个到UTC的数字常量偏移(时差)

我们建议在使用时区的时候,使用那些同时包含日期和时间的日期/时间类型。我们建议使用类型 time with time zone (尽管PostgreSQL出于遗留应用以及与SQL标准兼容性的考虑支持这个类型)。 PostgreSQL假设你用于任何类型的本地时区都只包含日期或时间。

        关于UTC和ISO 8601的概念以及作用,可参考:时间标准基础知识UTC和ISO8601。

        查看数据库当前使用的时区,


show time zone
--Asia/Shanghai

        查看数据库可供选择的时区:

select * from pg_timezone_names;

        设置时区,

①临时设置:退出cmd终端之后,时区设置就会丢失。

set time zone "Asia/Shanghai"

②永久设置:修改配置文件,

        如果想永久修改,我们需要更改配置文件postgresql.conf,将timezone进行修改,

log_timezone = 'PRC' timezone = 'PRC'

        将配置文件的这两个变量的值设置成自己想要的时区(PRC指:People's Republic of China),然后重新加载即可:pg_ctl reload。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/110301.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGLM2-6B Lora 微调训练医疗问答任务

一、ChatGLM2-6B Lora 微调 LoRA 微调技术的思想很简单,在原始 PLM (Pre-trained Language Model) 增加一个旁路,一般是在 transformer 层,做一个降维再升维的操作,模型的输入输出维度不变,来模拟 intrinsic rank&…

pytorch代码实现之动态卷积模块ODConv

ODConv动态卷积模块 ODConv可以视作CondConv的延续,将CondConv中一个维度上的动态特性进行了扩展,同时了考虑了空域、输入通道、输出通道等维度上的动态性,故称之为全维度动态卷积。ODConv通过并行策略采用多维注意力机制沿核空间的四个维度…

【JavaSE笔记】抽象类与接口

一、抽象类 1、概念 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 package demo2…

气传导耳机哪个好?值得推荐的气传导耳机分享

​随着生活节奏的加快,人们越来越关注听力健康。气传导耳机以其独特的传导方式和舒适的佩戴感受,逐渐成为耳机市场的新宠。气传导耳机不入耳设计听音,让你在享受音乐的同时,也能保护你的听力安全。今天我们就一起来看看几款值得大…

饲料添加剂 微生物 屎肠球菌

声明 本文是学习GB 7300.503-2023 饲料添加剂 第5部分:微生物 屎肠球菌. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了饲料添加剂屎肠球菌的技术要求、采样、检验规则、标签、包装、运输、贮存和保质 期&#xff0…

【vue】vue 中插槽的三种类型:

文章目录 一、匿名插槽&#xff1a;二、具名插槽&#xff1a;三、作用域插槽 一、匿名插槽&#xff1a;<slot></slot> 1.没有为插槽指定名称 2.通过slot标签可以添加匿名插槽 3.在使用组件的时候&#xff0c;组件中的内容会填充到所有匿名插槽的位置&#xff0c;所…

数据结构——散列函数、散列表

文章目录 前言一、散列表的基本概念二、散列函数的构造方法三、处理冲突的方法1. 开放定址法&#xff1a;2. 拉链法 四、散列查找及性能分析总结 前言 散列表的基本概念散列函数的构造方法处理冲突的方法散列查找及性能分析 提示&#xff1a;以下是本篇文章正文内容&#xff0…

七天学会C语言-第一天(C语言基本语句)

一、固定格式 这个是C程序的基本框架&#xff0c;需要记住&#xff01;&#xff01;&#xff01; #include<stdio.h>int main(){return 0; }二、printf 语句 简单输出一句C程序&#xff1a; #include<stdio.h> int main(){printf("大家好&#xff0c;&quo…

S7-1200PLC和LED电子看板通信(TCP/IP)

S7-200SMART PLC和LED电子看板通信应用,请查看下面文章链接: SMART 200 PLC UDP通讯应用LED看板_RXXW_Dor的博客-CSDN博客开放式用户通信 (OUC) 库:数据解析:https://rxxw-control.blog.csdn.net/article/details/121424897这篇博客我们主要介绍S7-1200PLC和LED电子看板通…

PowerDesigner 逆向工程以及IDEA中UML插件

1、MySQL数据库连接&#xff08;JDBC方式&#xff09; 1.1 新建一个pdm&#xff0c;dbms选择mysql 1.2 Database - Connect 选择数据库连接 1.3 配置连接信息 数据库连接这里是通过一个配置文件来获取连接信息的&#xff0c;首次的话因为没有&#xff0c;所以我们需要选择…

Michael.W基于Foundry精读Openzeppelin第34期——MerkleProof.sol

Michael.W基于Foundry精读Openzeppelin第34期——MerkleProof.sol 0. 版本0.1 MerkleProof.sol 1. 目标合约2. 代码精读2.1 processProof(bytes32[] memory proof, bytes32 leaf) && processProofCalldata(bytes32[] calldata proof, bytes32 leaf)2.2 verify(bytes32[…

人工智能现在可以从文本中生成具有CD音质的音乐,而且只会越来越好

想象一下&#xff0c;键入“戏剧性的介绍音乐”并听到一首飙升的交响乐&#xff0c;或者编写“令人毛骨悚然的脚步声”并获得高质量的音效。这是稳定音频的承诺&#xff0c;一个文本到音频的人工智能模型周三宣布由能合成立体声的稳定人工智能44.1千赫来自文字描述的音乐或声音…