使用Joda Time库将日期字符串转换为DateTime对象

时间:2011-06-06 13:25:28

标签: java datetime jodatime

我的日期为字符串,格式如下"04/02/2011 20:27:05"。我正在使用Joda-Time库,并希望将其转换为DateTime对象。我做了:

DateTime dt = new DateTime("04/02/2011 20:27:05")

但我收到以下错误:

Invalid format: "04/02/2011 14:42:17" is malformed at "/02/2011 14:42:17"

如何将上述日期转换为DateTime对象?

10 个答案:

答案 0 :(得分:446)

使用DateTimeFormat

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime dt = formatter.parseDateTime(string);

答案 1 :(得分:62)

我知道这是一个老问题,但我想补充一点,就像JodaTime 2.0一样,你可以用一个单行代码来做到这一点:

DateTime date = DateTime.parse("04/02/2011 20:27:05", 
                  DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"));

答案 2 :(得分:20)

DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");

答案 3 :(得分:15)

从评论中我选择了一个答案,并添加了TimeZone:

String dateTime = "2015-07-18T13:32:56.971-0400";

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
        .withLocale(Locale.ROOT)
        .withChronology(ISOChronology.getInstanceUTC());

DateTime dt = formatter.parseDateTime(dateTime);

答案 4 :(得分:13)

您的格式不是预期的ISO格式,您应该尝试

DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime time = format.parseDateTime("04/02/2011 20:27:05");

答案 5 :(得分:5)

您也可以使用SimpleDateFormat,如DateTimeFormat

Date startDate = null;
Date endDate = null;
try {
    if (validDateStart!= null) startDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateStart + " " + validDateStartTime);
    if (validDateEnd!= null) endDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateEnd + " " + validDateEndTime);
} catch (ParseException e) {
    e.printStackTrace();
}

答案 6 :(得分:3)

您需要一个适合您正在使用的格式的DateTimeFormatter。请查看文档以获取有关如何构建文档的说明。

关闭袖口,我认为你需要format = DateTimeFormat.forPattern("M/d/y H:m:s")

答案 7 :(得分:3)

TL;博士

java.time.LocalDateTime.parse( 
    "04/02/2011 20:27:05" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" )
)

java.time

现代方法使用的java.time类取代了古老的 Joda-Time 项目。

解析为LocalDateTime,因为您的输入缺少任何时区指示或从UTC偏移。

String input = "04/02/2011 20:27:05" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;
  

ldt.toString():2011-02-04T20:27:05

提示:如果可能,请在将日期时间值替换为文本而不是此处显示的格式时使用标准ISO 8601格式。方便的是,java.time类在解析/生成字符串时使用标准格式。

关于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

答案 8 :(得分:2)

一个简单的方法:

public static DateTime transfStringToDateTime(String dateParam, Session session) throws NotesException {
    DateTime dateRetour;
    dateRetour = session.createDateTime(dateParam);                 

    return dateRetour;
}

答案 9 :(得分:0)

两种方式可以实现

DateTimeFormat

DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");

SimpleDateFormat

        String dateValue = "04/02/2011 20:27:05";
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); //  04/02/2011 20:27:05

        Date date = sdf.parse(dateValue); // returns date object
        System.out.println(date); // outputs: Fri Feb 04 20:27:05 IST 2011