【问题标题】:Temporal types in JPA loosing AM/PMJPA 中的时间类型丢失 AM/PM
【发布时间】:2014-10-10 15:26:37
【问题描述】:

根据我的阅读,在 JPA 中处理日期时可以选择 3 种类型的 TemportalType。它们是:

DATE
          Map as java.sql.Date
TIME
          Map as java.sql.Time
TIMESTAMP
          Map as java.sql.Timestamp

我使用了TIMESTAMP,例如,它会像这样保留我的日期:2014-10-10 02:12:39

不过,我注意到的是,我正在失去我的约会对象的上午/下午。假设我的日期以字符串2014-10-10 02:12:39 PM 的形式出现,它将被保存为2014-10-10 02:12:39。当我去访问它时,它将是AM 而不是PM,因为我的日期格式是MMM dd, yyyy HH:mm:ss a

我应该使用哪种 TemporalType 将 AM/PM 信息保存在数据库中?

【问题讨论】:

  • java.util.Date(所有这 3 个 java.sql. 类的父类)只是一个 long 的包装器,其中包含自纪元 (1970-01-01 00:00:00) 以来经过的毫秒数。 Timestamp 根本不存储 AM/PM 信息,这可能代表 AM。可能您需要更改数据库的配置或将输出日期格式化为提供HH (00-23) 而不是hh (01-12) 的格式。
  • 只是评论,你说:...因为我的日期格式是MMM dd, yyyy HH:mm:ss a 注意HH是一天中的小时(0-23)所以上午/下午这种格式没有意义。如果它是hh(上午/下午 1-12 小时),那将是有意义的。
  • 哇,我自己也看到了。让我把它改成“hh”,看看它是否有影响
  • 是的,看起来这是我使用HH 而不是hh 的原因。如果您愿意,可以将其作为答案。

标签: java jpa temporal


【解决方案1】:

AM/PM/24H 只是日期的格式。在 java DateCalendar 等中,将日期存储为 long,其中包含自 01.01.1970 00:00:00 以来的毫秒数。

当我在 JPA 实体中存储日期时,我通常使用 Calendar 接口并使用 TemporalType.TIMESTAMP 注释字段(这将保留 hh:mm:ss 信息):

@Temporal( TemporalType.TIMESTAMP )
privete Calendar lastUpdated;

总结一下:您不能在数据库中保留 AM/PM 信息,因为这取决于区域设置。例如,在我的国家,我们使用 24H 格式的日期,而您显然使用 12H+AM/PM。为了正确显示日期,您应该使用与用户区域设置相对应的格式。

【讨论】:

    【解决方案2】:

    嗯......不可能“失去”上午/下午 - 也许你应该阅读它实际上是什么:http://en.wikipedia.org/wiki/12-hour_clockhttp://en.wikipedia.org/wiki/24-hour_clock

    您只需按照您想要的方式格式化您的时间/日期:https://stackoverflow.com/a/18734471/351861

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2020-01-29
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多