【问题标题】:How to format the String "2016-03-23T11:23:11.305+01:00" with SimpleDateFormat [duplicate]如何使用 SimpleDateFormat 格式化字符串“2016-03-23T11:23:11.305+01:00”[重复]
【发布时间】:2016-03-23 13:26:36
【问题描述】:

如何将字符串"2016-03-23T11:23:11.305+01:00" 转换为日期?

我已经尝试了以下方法,但我得到了 ParseException。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

【问题讨论】:

    标签: java date time simpledateformat parseexception


    【解决方案1】:

    来自SimpleDateFormat的javadoc

    z = 时区 一般时区 太平洋标准时间;太平洋标准时间; GMT-08:00

    Z = 时区 RFC 822 时区 -0800

    X = 时区 ISO 8601 时区 -08; -0800; -08:00 图案字母通常是重复的,因为它们的数量决定了确切的呈现方式:

    您应该使用X 为时区定义SimpleDateFormat,以将其表示为ISO 8601

    String d = "2016-03-23T11:23:11.305+01:00";
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
    Date da = df.parse(d);
    

    同样取自本文档中的示例

    "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" = 2001-07-04T12:08:56.235-07:00

    【讨论】:

    • 是的,我们希望 OP 至少在 Java-7 上,否则他/她将无法从模式符号 X 中受益。
    • 非常感谢,解决了我的问题。
    【解决方案2】:

    仅使用 1 个Z: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

    【讨论】:

    • 我之前试过了,还是不行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    相关资源
    最近更新 更多