我有以下格式的日期作为字符串"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
对象?
Answers:
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime dt = formatter.parseDateTime(string);
toString
功能时,“ zz”返回“ MEZ”,但我无法从中解析:Invalid format: "31. Januar 2013 06:38:08 MEZ" is malformed at "MEZ"
。这是一个已知的问题?如何避免呢?问候。
我知道这是一个古老的问题,但是我想补充一点,从JodaTime 2.0开始,您可以使用单行代码执行此操作:
DateTime date = DateTime.parse("04/02/2011 20:27:05",
DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"));
从评论中,我选择了一个答案,并添加了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);
您的格式不是预期的ISO格式,请尝试
DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime time = format.parseDateTime("04/02/2011 20:27:05");
您还可以使用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();
}
java.util.Date
,java.util.Calendar
和java.text.SimpleDateFormat
现在的遗产,由取代java.time内置到Java 8的Java 9.请参见类由Oracle教程。而且,java.time类是线程安全的,这与传统类不同。
您需要适合您使用的格式的DateTimeFormatter。查看文档以获取有关如何构建文档的说明。
袖套,我认为您需要 format = DateTimeFormat.forPattern("M/d/y H:m:s")
java.time.LocalDateTime.parse(
"04/02/2011 20:27:05" ,
DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" )
)
现代方法使用取代了古老的Joda-Time项目的java.time类。
LocalDateTime
由于您的输入缺少任何时区或从UTC偏移的指示,因此解析为a 。
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 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.Date
,Calendar
,和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
在哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。你可能在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,和更多。
有两种方法可以实现。
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
java.time
Java 8中的包解析日期字符串的任何人,请尝试使用LocalDateTime.parse
或Instant.parse
。