我正在使用 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/