【问题标题】:How to keep date info?如何保存日期信息?
【发布时间】:2013-05-21 08:10:10
【问题描述】:

在 java 中,我想知道为显示、查询、报告等保留日期信息的最佳做法是什么。似乎如果我们坚持这么久,所有时区依赖性都将被删除,我们将保持 'persist global , 本地显示原理,因为 Date 对象自动将 long 转换为当前时区。

但是持久化为 Date 对象有什么好处呢?
除了信息所有者的时区之外,我是否会丢失任何信息?
当 DLS 考虑在内时,我会得到任何错误信息吗?
保留为 UTC 日期和 long 之间的区别只是可读的数据库信息?

【问题讨论】:

  • 不清楚您使用的是什么语言/框架。是 .Net、Java、Javascript 吗?
  • 我的问题与语言无关。但是,我仍然编辑为 java
  • 不清楚你到底在追求什么。如果要保留日期信息,则应使用带时区的时间戳。
  • Merhaba Mustafa,根据我的经验,UTC 中特定于数据库的日期时间数据类型是最好的。然后在显示时将其转换为本地时区。

标签: java date


【解决方案1】:

根据您的数据库,您应该使用TIMESTAMP WITH TIMEZONE 或将其转换为UTC 时间并将其存储为long

第一个依赖于数据库来正确处理它(数据库会,但你的数据库驱动程序会吗?你必须为你的设置测试这个)。第二个让它成为一个手动过程,你最终会得到正确的结果,但会更麻烦,因为你必须照顾好一切。

在 Java 中,您可能希望使用 Calendar 而不是 Date,因为在那里您可以手动指定 TIMEZONE 等,因此您可以更轻松地在与您自己不同的时区中显示日期。

【讨论】:

  • 在 UTC 中不是 long 值吗?在转换为 long 之前我需要将其转换为 utc 吗?
  • 通常长值与时区无关:如果你从本地时间获取它,它包含从本地 1/1/1970 开始的毫秒数,如果你从 UTC 时间获取它从 UTC 1/1/ 开始1970.
  • @MustafaGenç 是的,不。这取决于您如何将其插入DateDate 类仅使用 local(例如在您的服务器上)时区。但这也意味着它将使用夏令时偏移。 (例如,德国 10 月的最后一个星期一没有 02.30,因为时间从 02.00 跳到 03.00)因此,如果您想使用 Date,请务必将您的本地时区设置为 UTC。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多