0

我正在从外部源将数据提取到我的程序中,它附加了一个 ISO8601 日期,但我们的要求之一是将小时/分钟/秒设置为零。这发生在我收到日期之前。所以我从数据中得到了这个。

2013-05-17T00:00:00.000Z

例如。然后我将该值放入名为“businessDay”的 Joda DateTime 对象中。我根据这个值做了一些处理,但是我需要将它持久化到 MongoDB。

由于 Joda DateTime 对象不可序列化,我需要将 DateTime 对象放入 Date 对象并将其持久化到 Mongo(并在它出现时反转它)。

当我以这种方式使用 Joda 时 businessDay.toDate()——我收到一个 Java Date 对象,但它是

Sun May 19 20:00:00 EDT 2013

正常打印出来的businessDay是

2013-05-20T00:00:00.000Z

它将其转换为我的本地时区,然后将其转换为前一天。我想要的是将 DateTime 对象转换为保留值的 Date 对象。

我一直在尝试使用 DateTimeFormatter 做很多事情,但我根本无法让它工作。我也一直在删除我所有的努力,否则我会将它们粘贴在这里,但我整天都在这样做以试图解决这个问题。

感谢您提供任何帮助。

编辑:

显示将 String Date 转换为 Joda DateTime 对象的方法。

 private DateTime asDateTime(String value) {
        // Was experiencing an issue converting DateTime to date, it would convert to localtime zone
        // giving me the wrong date. I am splitting the value into its year/month/day values and using a dateFormatter
        // to give me an appropriate format for the date. Timezone is based on UTC.
        String[] splitValue = value.split("-");
        String[] splitDay = splitValue[2].split("T");
        int year = Integer.parseInt(splitValue[0]);
        int month = Integer.parseInt(splitValue[1]);
        int day = Integer.parseInt(splitDay[0]);
        DateTime date = new DateTime(DateTimeZone.UTC).withDate(year, month, day).withTime(0, 0, 0, 0);
        return date;
    }
4

2 回答 2

2

首先,如果您刚刚有约会,我建议您使用LocalDate而不是DateTime. 但是,我认为您误解了以下内容java.util.Date

它将其转换为我的本地时区,然后将其转换为前一天。

不,真的没有。您的DateTime值恰好是 2013-05-20T00:00:00.000Z。现在 ajava.util.Date只是自 Unix 纪元以来的毫秒数它根本没有时区的概念。它相当于 Joda Time Instant

当您调用toString()aDate会将时间瞬间转换为您的本地时区 - 但这不是对象状态的一部分。

因此,您DateTime和您都Date代表世界标准时间 5 月 20 日午夜。我不知道 MongoDB 对该值做了什么,但只是从 Joda Time 到的转换java.util.Date没有您执行任何时区转换。

于 2013-05-20T05:32:22.623 回答
0

My apologies, I found out that it wasn't an issue of the Dates it was a completely different issue. MongoDB can accept a Java Date and will convert it to UTC format automatically.

My fault for creating this post before looking at this problem from different angles.

Do I accept the other answer and give the bounty? Just curious if that is the correct thing to do on Stack Overflow.

于 2013-05-20T14:08:19.273 回答