首页 > 解决方案 > JodaTime 月底转换

问题描述

DateConverter使用转换String为的方法非常简单org.joda.time.DateTime

public class DateConverter {
    private static final DateTimeFormatter DATE_TIME_FORMATTER =
            DateTimeFormat
                    .forPattern( "yyyy-MM-dd HH:mm:ss Z")
                    .withZone( DateTimeZone.forID("Europe/Warsaw") );

    public static DateTime toDateTime(String value) {
        return DateTime.parse(value, DATE_TIME_FORMATTER);
    }
}

现在来测试一下,

 String okDate = "2018-10-28 00:00:00 +0200";
 String wrongDate = "2018-10-29 00:00:00 +0200";        

 System.out.println("Ok result: " + DateConverter.toDateTime(okDate));
 System.out.println("Wrong result: " + DateConverter.toDateTime(wrongDate));

这给我留下了输出:

好的结果:2018-10-28T00:00:00.000+02:00
错误的结果:2018-10-28T23:00:00.000+01:00

到月底、29 日、30 日、31 日为止的所有日子都像 28 日。其余日子还好。有人可以帮我理解这里发生了什么吗?我犯的错误在哪里?

标签: javajodatimedate-conversion

解决方案


呃。您在该日期指定了 DST 更改的时区,因此可以按预期工作。

如果要输入本地日期时间,则不希望 Z 采用您的格式。


推荐阅读