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

标签 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 日期对象

    return localDate.toDate();
    

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

我是不是做错了什么 - 或者你们中有人遇到过类似的问题并且知道解决方法吗?

谢谢 拉惹

编辑:

首先感谢迈克尔。

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

 
    //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();

干杯 拉惹

最佳答案

顾名思义,

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

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

关于java - LocalDate.toDate( ) 返回不准确的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8741145/

相关文章:

java - 以下 JAVA 谓词的语法

java - 如何使用 SQLITE 中的 String[] 替换 String[] 常量

iphone - 将 Android 的 Java VM 移植到 iPhone?

javascript - 多年来以增量方式向日期添加天数

java - 编写中/大型系统时的问题

java - spring-data-rest,所有存储库的通用自定义方法

java - 有关 Android 定义和概念的帮助

java - 顶点着色器可以用于翻页效果吗?

java - 如何设置java.util.Date的时区?

javascript - AngularJS:RangeError:Date.toISOString (<anonymous>) 的无效时间值