Java String to DateTime

Java String to DateTime

我有一个来自json响应的字符串:

1
2
start:"2013-09-18T20:40:00+0000",
end:"2013-09-18T21:39:00+0000",

如何将此字符串转换为java DateTime对象?

我尝试过使用以下内容:

1
2
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
start = sdf.parse("2013-09-18T20:40:00+0000");

但有了这个,我只能创建一个日期对象。 但是在String中绑定的时间是必不可少的。

任何帮助是极大的赞赏!


您不需要DateTime对象。 java.util.Date也存储时间。

1
2
3
int hours = start.getHours(); //returns the hours
int minutes = start.getMinutes(); //returns the minutes
int seconds = start.getSeconds(); //returns the seconds

正如R.J所说,这些方法已被弃用,因此您可以使用java.util.Calendar类:

1
2
3
4
5
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse("2013-09-18T20:40:00+0000"));
int hour = calendar.get(Calendar.HOUR); //returns the hour
int minute = calendar.get(Calendar.MINUTE); //returns the minute
int second = calendar.get(Calendar.SECOND); //returns the second

注意:在我的结尾,sdf.parse("2013-09-18T20:40:00+0000")会触发一个

1
2
3
java.text.ParseException: Unparseable date:"2013-09-18T20:40:00+0000"
    at java.text.DateFormat.parse(DateFormat.java:357)
    at MainClass.main(MainClass.java:16)


您可以从Java Date对象创建Joda DateTime对象,因为Java没有DateTime类。

1
DateTime dt = new DateTime(start.getTime());

虽然Date类的Java也保存了时间信息(这就是你首先需要的),但我建议你使用Calendar而不是Date类的Java。

1
2
Calendar myCal = new GregorianCalendar();
myCal.setTime(date);

有关如何更有效地使用它的更多信息,请查看日历文档。

事情发生了变化,现在甚至Java(准确地说是Java 8)都有一个LocalDateTime和ZonedDateTime类。对于转换,您可以查看此SO答案(从那里发布摘录)。

鉴于:Date date = [some date]

(1)LocalDateTime << Instant << Date

1
2
Instant instant = Instant.ofEpochMilli(date.getTime());
LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);

(2)日期<< Instant << LocalDateTime

1
2
Instant instant = ldt.toInstant(ZoneOffset.UTC);
Date date = Date.from(instant);


您可以使用DateTimeFormatter

1
2
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
DateTime time = format.parseDateTime("2013-09-18T20:40:00+0000");