使用 Java 在 MongoDB 中根据本地时区插入/检索日期

Posted

技术标签:

【中文标题】使用 Java 在 MongoDB 中根据本地时区插入/检索日期【英文标题】:Insert/Retrieve Date as per local time zone in MongoDB using Java 【发布时间】:2013-09-11 13:44:26 【问题描述】:

我正在使用 java 在 mongodb 集合中插入当前日期。

我正在使用以下代码:

BasicDBObject doc = new BasicDBObject("date",new Date()); coll.insert(doc);

它以 GMT 格式保存日期,而不是我的本地时区。 但是当我使用命令通过 shell 插入时: db.test.insert(date:Date()); 它占用了我的本地时区。

有没有办法使用java按照本地时区格式插入日期 或任何在检索时将日期转换为本地时区的方法。

感谢和问候

【问题讨论】:

我真的建议您将所有日期插入为 GMT。它将为您节省大量夏令时的麻烦,以及何时将您的应用程序部署到多个时区。 我同意菲利普的观点。为了找到您问题的答案,当我在本地运行插入时,我看到日期是以部署应用程序所在的格式插入的(至少对我而言)。您的控制台和应用程序服务器是否在不同的盒子上? 不,我目前使用的是同一个系统。 【参考方案1】:

java Date object 有意与时区无关,并且应该表示 GMT 时间(它在内部将其值存储为自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数)。我真的建议您使用它并在内部处理 GMT 中的所有日期,因为它可以在夏令时或以分布式方式在多个时区部署应用程序时为您省去很多麻烦。

要将 Date 对象与用户时区中表示它的字符串进行转换,请使用 SimpleDateFormat 对用户调用 setTimeZone 方法 TimeZone (静态方法 TimeZone.getDefault() 为您提供本地系统的时区)。

【讨论】:

以上是关于使用 Java 在 MongoDB 中根据本地时区插入/检索日期的主要内容,如果未能解决你的问题,请参考以下文章

使用mongodb在utc中存储日期时如何处理时区问题?

如何根据 bigquery 中的时区列将 UTC 时间转换为本地时区?

nodejs,mongodb不同时区问题

如何根据 Big Query 中的 UTC 时间戳在 Data Studio 中显示本地时区的日期/时间

如何将用户的本地时间转换为多伦多时区,然后在 Javascript 中根据多伦多时间检查 dst?

强制 Java 时区为 GMT/UTC