【问题标题】:What is the data type for date and time in PostgreSQL?PostgreSQL 中日期和时间的数据类型是什么?
【发布时间】:2021-12-10 12:57:38
【问题描述】:

我知道数据类型是 TIMESTAMP、DATE、TIME 等。我也知道我应该使用 TIMESTAMP,因为它会跟踪任何更改。

我从前端带来日期,在我的反应组件中日期是

const dateTime = new Date().toLocaleString("en-GB")

其输出为“24/10/2021, 14:37:49”

如果我将数据类型设置为 TIMESTAMP,则会出现错误。

问题是接受上述日期和时间格式的数据类型应该是什么。 我试过 DATETIME 但它给出了一个错误,说 DATETIME 不存在。 SQL查询:

ALTER TABLE user_info_2 ADD date_col1 TIMEDATE;

我是 PostgreSQL 的新手,因此感谢任何帮助。

【问题讨论】:

  • "接受上述日期和时间格式的数据类型应该是什么" - 你问错了问题。除了向英国用户显示时间戳之外,不要使用该英国格式!像其他人一样使用ISO 8601 发送时间戳(例如,从前端到后端、从后端到数据库或反向)。
  • @Bergi 感谢您抽出时间回复。但是,如果这是针对英国用户的,那又如何呢?
  • 那么仍然使用 ISO 8601。
  • @Brute—Bergi 正在区分您存储在数据库中的内容和您向用户显示的内容。

标签: javascript reactjs postgresql datetime


【解决方案1】:

如我所见,使用Date().toLocaleString() 将返回一个字符串类型。您应该使用 Date 对象进行持久化。对于 Postgres 中的列类型,请使用 TIMESTAMP。

typeof(Date().toLocaleString("en-GB"))

输出将是“字符串”...

【讨论】:

【解决方案2】:

问题不在于格式本身,而在于默认 Postgres Datestyle 日期排序为:

--Note the MDY date ordering
show datestyle ;
 DateStyle 
-----------
 ISO, MDY

select '24/10/2021, 14:37:49'::timestamptz;
ERROR:  date/time field value out of range: "24/10/2021, 14:37:49"
LINE 1: select '24/10/2021, 14:37:49'::timestamptz;

---Change date ordering to put date first

set datestyle = iso,DMY;
show datestyle ;
 DateStyle 
-----------
 ISO, DMY
(1 row)

select '24/10/2021, 14:37:49'::timestamptz;
      timestamptz       
------------------------
 2021-10-24 14:37:49-07

所以你有两个选择:

  1. 在 postgresql.conf 中更改 DateStyle 'permanently' 或使用 set datestyle = iso,DMY; 临时更改每个会话

  2. 使用 ISO 格式:

select '2021-10-24, 14:37:49'::timestamptz;
      timestamptz       
------------------------
 2021-10-24 14:37:49-07

我会说 2) 是首选,因为 Postgres 不存储格式,因此如何输入数据确实很重要。如果日期顺序对您的用户很重要,那么在向他们展示输出时进行适当的格式化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多