我有一个日期作为字符串,格式如下“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对象?
我有一个日期作为字符串,格式如下“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对象?
当前回答
我知道这是一个老问题,但我想补充一点,从JodaTime 2.0开始,你可以用一行程序来完成:
DateTime date = DateTime.parse("04/02/2011 20:27:05",
DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"));
其他回答
使用DateTimeFormat:
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime dt = formatter.parseDateTime(string);
从评论中我选择了一个类似的答案,并添加了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。时间类,取代了古老的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。时间框架内置于Java 8及更高版本中。这些类取代了麻烦的旧遗留日期-时间类,如java.util。日期,日历和简单日期格式。
Joda-Time项目现在处于维护模式,建议迁移到java。时间类。
要了解更多,请参阅Oracle教程。搜索Stack Overflow可以找到很多例子和解释。规范是JSR 310。
从哪里获取java。时间类?
Java SE 8、Java SE 9以及更高版本 内置的。 带有捆绑实现的标准Java API的一部分。 Java 9增加了一些小特性并进行了修复。 Java SE 6和Java SE 7 大部分的java。时间功能在ThreeTen-Backport中向后移植到Java 6和7。 安卓 ThreeTenABP项目将ThreeTen-Backport(上文提到过)专门用于Android。 参见如何使用ThreeTenABP....
ThreeTen-Extra项目扩展了java。额外的课程时间。这个项目是未来可能添加到java.time的一个试验场。你可以在这里找到一些有用的类,比如Interval、YearWeek、YearQuarter等等。
您的格式不是期望的ISO格式,您应该尝试一下
DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime time = format.parseDateTime("04/02/2011 20:27:05");
有两种方法可以实现这一目标。
DateTimeFormat
DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");
简单日期格式
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