Joda DateTimeFormatter在解析时更改日期

时间:2015-11-18 02:36:50

标签: java jdbc jodatime datetime-format

使用Joda DateTimeFormatter时遇到问题。 请帮帮我!!

这就是我的格式化程序的样子 -

最终静态DateTimeFormatter inJodaFmter             = DateTimeFormat.forPattern(“YYYY-MM-DD HH:mm:ss”);

我正在进行JDBC调用并将日期作为String。

resultSet.getString(10)返回“2013-12-06 00:00:00”

但是,在使用Joda DateTimeFormatter对其进行格式化时,它会发生如下变化。

inJodaFmter.parseLocalDateTime(resultSet.getString(10))=(org.joda.time.LocalDateTime) 2013-01-06T00:00:00.000

这是错误的。 请建议。

3 个答案:

答案 0 :(得分:2)

TL;博士

使用智能对象,而不是愚蠢的字符串。

java.time.LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class )

java.time

仅供参考,Joda-Time项目现在位于maintenance mode,团队建议迁移到java.time课程。请参阅Tutorial by Oracle

使用JDBC 4.2及更高版本,您可以通过getObject&更新来直接与数据库交换java.time对象。 setObject方法。使用对象而不仅仅是字符串来与数据库通信。

无区域

如果从类似于标准TIMESTAMP WITHOUT TIME ZONE的类型定义的列中绘制数据,请使用LocalDateTime类。

LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;

UTC

如果从类似于标准TIMESTAMP WITH TIME ZONE的类型定义的列中绘制数据,请使用Instant类或ZonedDateTime类。

Instant instant = myResultSet.getObject( … , Instant.class ) ;

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 1 :(得分:1)

使用模式解决 DateTimeFormat.forPattern(" Y-M-d H:m:s")

来源 - http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html

答案 2 :(得分:0)

另外,你可以这样试试;

public class Test {
    static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

    public static void main(String[] args) {
        String dateTime = "2013-12-06 00:00:00";
        DateTimeFormatter formatter = DateTimeFormat.forPattern(DATE_FORMAT);
        DateTime jodatime = formatter.parseDateTime(dateTime);
        System.out.println(jodatime);

    }
}