使用DateFormat将字符串转换为日期

时间:2011-12-13 13:56:16

标签: java date-format

我将此日期作为SOAP消息的字符串

"2009-12-02T12:58:38.415+01:00"

我能够识别和改变主题的大多数是

使用此格式yyyy-MM-dd ? hh:mm:ss.????

我尝试使用SSS T z Z而不是'?"

进行不同的组合
DateFormat df = new SimpleDateFormat("... various formats ...");
System.out.println(df.parse("2009-12-02T12:58:38.415+01:00"));

但没有成功。

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:4)

你必须改变时区部分。试试这个:

String a = "2009-12-02T12:58:38.415+01:00";
    a = a.replaceFirst(":(?=\\d+$)", "");
    final DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    System.out.println(df.parse(a));

答案 1 :(得分:1)

我不认为使用标准Java日期格式是可行的。 使用joda-time可以使用以下代码完成此操作:

    DateTimeFormatterBuilder b = new DateTimeFormatterBuilder()
            .appendYear(4, 4).appendLiteral('-').appendMonthOfYear(2).appendLiteral('-').appendDayOfMonth(2)
            .appendLiteral('T')
            .appendHourOfDay(2).appendLiteral(':').appendMinuteOfHour(2).appendLiteral(':').appendSecondOfMinute(2)
            .appendLiteral('.').appendMillisOfSecond(3).appendTimeZoneOffset(null, true, 2, 2);
    DateTimeFormatter dateTimeParser = b.toFormatter();
    System.out.println(dateTimeParser.parseDateTime("2009-12-02T12:58:38.415+01:00"));

答案 2 :(得分:1)

尝试使用以下内容。

String date = "2009-12-02T12:58:38.415+01:00";
        int lastIndexOf = date.lastIndexOf(":");
        if(lastIndexOf>=0){
        date = date.substring(0,lastIndexOf)+date.substring(lastIndexOf+1);
        }
        System.out.println("~~~~~~date~~~~~"+date);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSSZ");
        try {
            sdf.parse(date);
            System.out.println("....date..."+date);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }