【问题标题】:DateTime ParseException for date with offset带有偏移的日期的 DateTime ParseException
【发布时间】:2014-04-22 13:41:09
【问题描述】:

如何解析像2014-04-25T01:50:00.000-06:00 这样的日期字符串?我正在使用 Joda DateTime 并尝试过类似的方法:

public static String formatDate(Date d){
    SimpleDateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.00'0Z'");
    String mdy = mdyFormat.format(d);
    return mdy;
}

但是,结果是错误的:

java.text.ParseException:无法解析的日期: “2014-04-25T01:50:00.000-06:00”

【问题讨论】:

  • 试试:yyyy-MM-dd'T'HH:mm:ss.SSSZ
  • 嘿Larme,我试过了,但也没有用。
  • 为什么你的问题是“如何解析”,但你的代码是关于格式化Date

标签: java date datetime


【解决方案1】:

尝试以这种方式定义格式:

 DateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")

【讨论】:

    【解决方案2】:

    这是标准的 ISO 8601 格式。如果您使用的是 Joda Time:

    DateTimeFormatter fmt = ISODateTimeFormat.dateTimeParser();
    DateTime dateTime = fmt.parseDateTime("2014-04-25T01:50:00.000-06:00");
    
    // Convert it to java.util.Date
    Date date = dateTime.toDate();
    

    【讨论】:

    • 感谢 Jesper 的建议,以后会对我有用。但是我目前的问题是我需要将 DateTime 转换为 java.util.Date,当我尝试将值解析为 Date 时,我得到了这个异常。
    • 将 Joda DateTime 转换为 java.util.Date 非常简单;你只需拨打toDate()就可以了。我会更新我的答案。
    【解决方案3】:

    如果你使用旧的 JDK-SimpleDateFormat 试试这个 Java7 模式:

    yyyy-MM-dd'T'HH:mm:ss.SSSXXX
    

    原因在javadoc中给出:

    三个字母ISO8601时区: 签署 TwoDigitHours : 分钟

    如果您使用 JodaTime,则不应使用 SimpleDateFormat,而应使用 Joda-solution,否则您只会混淆 JDK- 和 Joda 类型:

    DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    

    更新因为您对 Jespers 回答的评论:

    如果您只想将DateTime 转换为java.util.Date,那么这既不是格式问题也不是解析问题。解决方案要简单得多。只需使用toDate()

    DateTime dt = ...;
    java.util.Date jdkDate = dt.toDate();
    

    【讨论】:

      猜你喜欢
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 2022-10-19
      • 1970-01-01
      相关资源
      最近更新 更多