LocalDate.toDate()返回不准确的日期

时间:2012-01-05 10:44:01

标签: java android date jodatime

我正在使用JODA格式化日期类型:2012-01-05T08:00:00.000Z(2012年1月5日的日期)并尝试将其转换为Java日期。

以下是我在此阶段采取的步骤:

  • 使用DateTimeFormatter进行初始格式化:

    DateTimeFormatter jodaParser = DateTimeFormat
                                .forPattern(inputDateWhichIsAString);
    
  • 使用必要的时区(UTC)将其转换为LocalDate

    LocalDate localDate = jodaParser
                                .withZone(DateTimeZone.UTC)
                                .parseDateTime(inputDateWhichIsAString).toLocalDate();
    
  • 使用LocalDate检索Java Date对象

    return localDate.toDate();
    

然而,虽然我希望返回的日期是:2012年1月5日,但我得到的是1970年1月1日。我的印象是JODA负责处理Java Date对象已知的这些问题。

我在这里做错了什么 - 或者你们中的任何人遇到过类似的问题并知道解决方法吗?

由于 拉雅

编辑:

首先感谢迈克尔。

所以这是对我之前的片段的改进,它确保我得到正确的日期 - 换句话说就是解决方案。

 
    //Make sure you use HH instead of hh if you are using 24 hour convention. I use this convention since my date format is: 2012-01-05T08:00:00.000Z


     DateTimeFormatter jodaParser = 
                 DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ");

     LocalDate date = jodaParser.withZone(DateTimeZone.UTC).parseDateTime
                 (inputDateWhichIsAString).toLocalDate();

     return date.toDate();

干杯 拉雅

2 个答案:

答案 0 :(得分:3)

顾名思义,

DateTimeFormat.forPattern期望一种模式而不是转换的输入。只有DateTimeFormatter.parseDateTime(String)期望String解析实际数据。

因此,在DateTimeFormat.forPattern的String中,您必须传递一个formatstring。根据您的输入,使用此处描述的格式符号:http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html#forPattern(java.lang.String

答案 1 :(得分:0)

因为我们都喜欢更短的解决方案:

考虑到我的日期格式是JODA定义的ISODateFormat类型之一,我的问题的一个更简单的解决方案是:

DateTimeFormatter fmt = ISODateTimeFormat.dateTime();
DateTime dateTime = fmt.parseDateTime(inputDateWhichIsAString);
if (dateTime != null) {
    Date date = dateTime.toDate();
}
return date;