15

我有一个来自 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");

但有了这个我只能创建一个日期对象。但是绑定在 String 中的时间有点重要。

任何帮助是极大的赞赏!

4

5 回答 5

8

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

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

正如 RJ 所说,这些方法已被弃用,因此您可以使用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)
于 2013-09-16T08:37:35.020 回答
7

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

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

尽管DateJava 类也保存了时间信息(这是您首先需要的),但我建议您使用 aCalendar而不是DateJava 类。

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) 日期 << 即时 << LocalDateTime

Instant instant = ldt.toInstant(ZoneOffset.UTC);
Date date = Date.from(instant);
于 2013-09-16T08:36:52.840 回答
4

您可以使用DateTimeFormatter

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
DateTime time = format.parseDateTime("2013-09-18T20:40:00+0000");
于 2013-09-16T08:53:20.443 回答
0

java.time

我建议您使用现代 Java 日期和时间 API java.time 进行日期和时间工作。

    String startStr = "2013-09-18T20:40:00+0000";
    OffsetDateTime start = OffsetDateTime.parse(startStr, isoFormatter);
    System.out.println(start);

输出是:

2013-09-18T20:40Z

我正在使用这个格式化程序:

private static final DateTimeFormatter isoFormatter = new DateTimeFormatterBuilder()
        .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
        .appendOffset("+HHMM", "+0000")
        .toFormatter();

如果DateTime您的意思是对象org.joda.time.Datetime,请阅读 Joda-Time 主页上的这句话(粗体字为原文):

请注意,从 Java SE 8 开始,用户被要求迁移到java.time(JSR-310) - JDK 的核心部分,它取代了这个项目。

SimpleDateFormat您在问题中尝试使用的课程是课程臭名昭著的麻烦制造者,并且早已过时。在任何情况下都不要使用它。曾经。

链接

于 2021-02-16T20:59:22.270 回答
0

你试过这个吗?

Date date1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2013-09-18T20:40:00+0000".replace("T"," ").substring(0,19));
于 2021-05-03T13:13:32.253 回答