Java 字符串到日期时间

2022-09-03 01:59:10

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

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

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

我尝试使用以下方法:

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

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

任何帮助都非常感谢!


答案 1

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

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 类:

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")

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)

答案 2

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

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

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

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

请查看日历文档,详细了解如何更有效地使用它。


事情已经发生了变化,现在甚至Java(确切地说是Java 8)也有LocalDateTimeZonedDateTime类。对于转换,您可以查看此SO答案(从那里发布摘录)。

鉴于:Date date = [some date]

(1) LocalDateTime << Instant<< Date

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

(2) <<本地日期<<即时日期

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