Postgresql 日期时间怎么以yyyy/MM/dd HH:mm:ss形式存储

### 问题描述
项目需要将时间类型以yyyy/MM/dd HH:mm:ss形式存储,postgresql用的不多,数据库版本用的是96版本的不知道怎么设置

阅读 5.8k
2 个回答

建议题主还是回头再梳理一下项目的真正需求是什么吧,对于你所说的需求

项目需要将时间类型以yyyy/MM/dd HH:mm:ss形式存储

以我个人经验判断,这多半是一个伪需求。因为正常的业务需求应该是“所有时间戳的展示应该统一遵循yyyy/MM/dd HH:mm:ss” 这样的格式,很少会有需求方会将需求定义到把时间戳的存储格式。

倒也不是说没见过时间戳这么存的,但是如果时间戳真的按照“yyyy/MM/dd HH:mm:ss”这样的字符串形式来存,一来存储太浪费了(你可以算算存一个时间戳需要多少字节),而来以字符串来做索引的话效率不会太高。

通常的最佳实践是:

  • 时间戳在数据库中的存储使用内置的时间类型进行存储。以PostgreSQL为例,就是使用其TIMESTAMP类型存储(8字节). 如果业务应用涉及到跨时区的数据,那么可以考虑使用TIMESTAMP WITH TIME ZONE类型(10字节)
  • 时间戳数据在程序内部四处传递时,按照程序语言支持的映射类型进行传递。不要过早转换成字符串,以免增加数据传递成本以及数据处理复杂度(如果程序语言没有对应的映射类型,直接用原生的8字节数值类型传递亦可)
  • 当时间戳数据需要展示给人看的时候才去做格式化处理。这种处理可以根据具体需要从以下两个层面选择转换的具体方法

    • 在数据库层面进行处理。比如在PostgreSQL中对TIMESTAMP类型调用其UDF to_char()进行格式化转换
    • 在应用程序层面通过程序语言的相关库函数进行格式化转换。比如Java的SimpleDateFormat#format()方法

此外,关于PG中TIMESTAMP类型的使用,我以前也做过下述回答,可供参考:

我感觉你是我坤哥啊!!! 数据库里时间没必要用特别的格式存吧,就用postgresql默认的就好了啊 pojo的日期字段使用LocalDateTime 插入之前和查询之后 用DateTimeFormatter格式化一下 还是我理解错了你的需求?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题