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

我有一个日期作为字符串,格式如下:"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对象?

414487 次浏览

您的格式不是期望的ISO格式,您应该尝试一下

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

使用DateTimeFormat:

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

你需要一个适合你正在使用的格式的DateTimeFormatter。看看文档中关于如何构建一个的说明。

即兴的,我认为你需要format = DateTimeFormat.forPattern("M/d/y H:m:s")

你也可以使用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();
}

我知道这是一个老问题,但我想补充一点,从JodaTime 2.0开始,你可以用一行程序来完成:

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

一个简单的方法:

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


return dateRetour;
}

从评论中我选择了一个类似的答案,并添加了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);

博士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 - 04 - t20:27:05

提示:在可能的情况下,在以文本形式交换日期-时间值时,使用标准的ISO 8601格式,而不是这里看到的格式。方便的是,java。时间类在解析/生成字符串时使用标准格式。


关于java.time

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

现在在维护模式中的Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参见甲骨文教程。搜索Stack Overflow可以找到很多例子和解释。规格是JSR 310

从哪里获取java。时间类?

两种方式,这个可以是实现

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