2012-01-05 116 views
3

我正在使用JODA格式化日期类型:2012-01-05T08:00:00.000Z(2012年1月5日),并试图将其转换为Java日期。LocalDate.toDate()返回不准确的日期

以下是该我走在这个阶段的步骤:

  • 使用DateTimeFormatter做初步格式:

    DateTimeFormatter jodaParser = DateTimeFormat 
              .forPattern(inputDateWhichIsAString); 
    
  • 它提供必要的时间转换成一个LOCALDATE的区域(UTC)

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

    return localDate.toDate(); 
    

但是当我应该期望返回的日期是:2012年1月5日,我所得到的是1970年一月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(); 

干杯 拉杰特

+0

+1对于残酷的命名,约定blubWhichIsAString :) – poitroae 2012-01-05 10:48:21

+0

@迈克尔:原谅我的无奈有:d – 2012-01-05 12:21:07

回答

3

DateTimeFormat.forPattern预计,顾名思义,图案,而不是输入到从转换。只有DateTimeFormatter.parseDateTime(String)需要String来分析实际数据。

所以在DateTimeFormat.forPattern的字符串中,你必须传递一个格式字符串。根据您的输入,使用这里描述的格式符号:)

0

http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html#forPattern(java.lang.String既然大家都喜欢较短的解决方案:

考虑我的日期格式类型ISODateFormat的一个由JODA一个更简单的解决我的问题定义会是:

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

请确保您的代码被格式化,并认为正确因此它保持既便于阅读和遵守。我没有测试代码,但可以清楚地看到'date'没有在return语句所在的行中定义。 – poitroae 2012-01-06 23:44:15

相关问题