【问题标题】:Java's getDate returns wrong dateJava 的 getDate 返回错误的日期
【发布时间】:2016-03-29 11:35:44
【问题描述】:

我正在从我的 Parse 数据库中检索一些日期。问题是从数据库中检索到的日期之一返回错误的日期。在这种情况下,当我检索日期 01/10/2016 时,它会返回 02/10/2016!但是,其他日期返回正确的日期(在本例中是日志中的另外两个日期(07/02/2016 和 21/02/2016)。

什么奇怪的原因导致只在这个日期返回错误的日期,而每隔一个日期返回正确的日期?!

(list 是我数据库中 parseObjects 的列表,包含日期)

Date[] surveyDate = new Date[list.size()];
for(int i = 0; i<list.size(); i++){
    surveyDate[i] = list.get(i).getDate("day");
    System.out.println("surveyDate: " +surveyDate[i].getDate() + ", " + (surveyDate[i].getMonth()+1) + ", " + (surveyDate[i].getYear()+1900));
}

日志

I/System.out: surveyDate: date: 7, month: 2, 2016
I/System.out: surveyDate: date: 21, month: 2, 2016
I/System.out: surveyDate: date: 2, month: 10, 2016

这里我在数据库中有一张我的日期的图像,您可以看到只有最后一个(10 月 1 日)返回了错误的值。

顺便说一下,不要担心图片中显示的其他日期,它们是在列表中排序和排序的。

数据库上的日期

【问题讨论】:

  • 您没有展示如何获取(或操作)列表。您的数据库映像中有一些日期不在您的日志中,您不知道吗?
  • 对不起,我没有提到。该列表已排序和排序,因此列表大小为 3,包含记录的 3 个日期。我将编辑我的帖子以使其更清晰
  • 您是否尝试过改用Calendar 类?这些方法都已弃用。如果您认为它们应该可以工作,那么您是否尝试过在本地数据存储中插入一个日期,然后立即检索它?我非常怀疑问题出在 Java getDate 函数上。
  • @ SteinarSeim 提示:考虑使用 Java 8 及更高版本中内置的java.time 框架的back-portAndroid version

标签: java android date parsing getdate


【解决方案1】:

检查时区。 DB 中的日期 1/10/2016 已接近午夜。

也许您正在 GMT 中检索这些日期并应用 JVM 时区。

如果您也在控制台上打印时间会有所帮助。

【讨论】:

  • 哦,我当然应该马上想到这个!嗯,谢谢你的反馈,我现在已经修好了,我的设备检索是在数据库之前几个小时...
  • 完美,捉鬼!感谢您在答案中投票;-)
  • @SteinarSeim 为了防止这种疏忽,请训练自己作为程序员考虑“日期时间”、“仅日期”和“仅时间”。日期时间工作是棘手的事情,在与 Java、JDBC、SQL 和数据库相交时更是如此。更有意识地了解所涉及的数据类型会有所帮助。
【解决方案2】:

这可能与时区有关。检查数据库服务器和检索记录的服务器的时区,它们可能不同。

一个好的做法是始终使用 datetimeoffset 以避免任何混淆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多