Java字符串到日期时间

Java字符串到日期时间,java,datetime,Java,Datetime,我有一个来自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");

我有一个来自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");
但是有了这个,我只能创建一个日期对象。但是绑定在字符串中的时间有点重要

非常感谢您的帮助

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

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

虽然Java的
Date
类也包含时间信息(这是您首先需要的),但我建议您使用
Calendar
而不是Java的
Date

Calendar myCal = new GregorianCalendar();
myCal.setTime(date);
查看文档,了解如何更有效地使用它的更多信息


事情发生了变化,现在甚至Java(确切地说是Java8)也有了一个和类。对于转换,您可以看看这个(从那里发布摘录)

给定:
Date-Date=[某个日期]


(1)LocalDateTime您不需要
DateTime
对象。也存储时间

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

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

注意:在我这边,
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)
你可以用

java.time 我建议您在日期和时间工作中使用java.time,即现代java日期和时间API

    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主页上的这段引文(黑体字为原文):

注意,从JavaSE8开始,用户被要求迁移到
Java.time
(JSR-310)——JDK的核心部分,它取代了这一功能 项目。

您在问题中尝试使用的
SimpleDateFormat
类是一个臭名昭著的类麻烦制造者,而且早已过时。在任何情况下都不要使用它。永远

链接
  • 解释如何使用java.time
    • 你试过这个吗

      Date date1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2013-09-18T20:40:00+0000".replace("T"," ").substring(0,19));
      

      Date
      也有时间信息。好的,但我仍然需要它是一个DateTime对象:)Java没有
      DateTime
      类。使用
      Date
      。您是在谈论java api还是joda time api?仅供参考,像、
      java.text.SimpleDateFormat
      这样麻烦的旧日期时间类现在被java 8和更高版本中内置的类所取代。关于Joda的使用,请参见.1——它是一个比基本Java更好的日期实现one@RJ您的链接指向错误的
      Date
      ,它是
      java.util.Date
      ,而不是
      java.sql.Date
      :)
      LocalDateTime
      是此处使用的错误类型。您将丢弃宝贵的时区或UTC信息的偏移量。当你想在另一个地区的挂钟时间查看
      即时
      时,请使用
      ZoneDateTime
      。这种支持从Android O开始就有了。不,@PrasadGKulkarni,这是Joda time,一个与早期Android版本配合良好的外部库。
      DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
      DateTime time = format.parseDateTime("2013-09-18T20:40:00+0000");
      
          String startStr = "2013-09-18T20:40:00+0000";
          OffsetDateTime start = OffsetDateTime.parse(startStr, isoFormatter);
          System.out.println(start);
      
      private static final DateTimeFormatter isoFormatter = new DateTimeFormatterBuilder()
              .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
              .appendOffset("+HHMM", "+0000")
              .toFormatter();
      
      Date date1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2013-09-18T20:40:00+0000".replace("T"," ").substring(0,19));