【问题标题】:convert date from 2013-08-22T10:47:12+02:00 to 2013-08-22 10:47:12将日期从 2013-08-22T10:47:12+02:00 转换为 2013-08-22 10:47:12
【发布时间】:2014-07-23 09:44:43
【问题描述】:

大家好,

我想知道如何将带有时区的日期(如2013-08-22T10:47:12+02:00)转换为另一个日期2013-08-22 10:47:12

我尝试使用 SimpleDateFormat 对象来执行此操作,但我有同样的例外:

java.text.ParseException: Unparseable date: "2013-08-22T10:47:12+02:00"

你能帮帮我吗?谢谢

更新

我在这里显示我的失败代码:

        String CURRENT_TIME_PATTERN ="yyyy-MM-dd'T'HH:mm:yyX";
        String NEW_TIME_PATTERN ="yyyy-MM-dd HH:mm:ss";
        String data="2013-08-22T10:47:12+02:00";
        SimpleDateFormat sdf = new SimpleDateFormat(CURRENT_TIME_PATTERN);
        SimpleDateFormat output = new SimpleDateFormat(NEW_TIME_PATTERN);
        Date d = sdf.parse(data);
        String formattedTime = output.format(d);
        System.out.println(formattedTime);

通过这种方式,我将对无效参数“X”产生异常。

如果我使用这种模式String CURRENT_TIME_PATTERN ="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";,我会得到不可解析的日期异常。

【问题讨论】:

  • 你用什么格式解析的?
  • 所以你只想把 T 变成一个空格,然后把 + 开始的所有东西都去掉?
  • 您应该遵循有关日期解析的教程。
  • 这是我排除的格式:yyyy-MM-dd'T'HH:mm:ssz 这是我想转换日期的新格式yyyy-MM-dd HH:mm:ss
  • 由于您的输入格式是 ISO 8601 样式,请尝试使用 X(“ISO 8601 时区”)而不是 z(“一般时区”)。

标签: java date datetime simpledateformat


【解决方案1】:

我建议使用Joda-Time 进行任何日期和时间格式化/解析。

使用以下导入:

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

还有如下代码:

String input = "2013-08-22T10:47:12+02:00";
DateTimeFormatter formatterA = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
DateTimeFormatter formatterB = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dateTime = formatterA.parseDateTime(input);
String output = dateTime.toString(formatterB);

【讨论】:

  • 好的,谢谢,但是为什么他不工作,我使用 SimpleDateFormat 对象从yyyy-MM-dd'T'HH:mm:ssZyyyy-MM-dd HH:mm:ss。他总是给我同样的例外。
【解决方案2】:

如果你的String 中总是有T,你应该试试这个:

    String s = "2013-08-22T10:47:12+02:00";
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:yyX"); // here X is for ISO 8601 time zone
    Date parseDate = formatter.parse(s);
    formatter.applyPattern("yyyy-MM-dd HH:mm:yy");
    String formattedStr = formatter.format(parseDate);
    System.out.println(formattedStr);

更新:删除了String#replace() 方法并将格式化程序模式更改为"yyyy-MM-dd'T'HH:mm:yyX"

【讨论】:

  • 我试过但他给了我:java.lang.IllegalArgumentException: Illegal pattern character 'X' exception.
  • 您会通过编辑将代码放入问题中吗?
【解决方案3】:

试试这个..

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        String date = "2013-08-22T10:47:12+02:00";
        Date date1 = dateFormat.parse(date);
        SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String myDate = dateFormat1.format(date1);
        System.out.println("Date :: " + myDate);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-26
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    相关资源
    最近更新 更多