编程语言
首页 > 编程语言> > java-LocalDate.toDate()返回不正确的日期

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

作者:互联网

我正在使用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();

干杯
拉贾特

解决方法:

顾名思义,DateTimeFormat.forPattern期望使用模式而不是要转换的输入.仅DateTimeFormatter.parseDateTime(String)期望String解析实际数据.

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

标签:jodatime,java,android,date
来源: https://codeday.me/bug/20191201/2084356.html