7

我在 java 中解析日期时间时遇到问题,我有一个奇怪的日期时间格式。如何在java中解析2013-04-03T17:04:39.9430000+03:00日期时间以在java中格式化dd.MM.yyyy HH:mm

4

4 回答 4

17

有问题的“奇怪”格式是ISO-8601 - 它使用非常广泛。您可以使用SimpleDateFormat以您喜欢的大多数方式重新格式化它:

SimpleDateFormat inFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
DateTime dtIn = inFormat.parse(dateString});  //where dateString is a date in ISO-8601 format
SimpleDateFormat outFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm");
String dtOut = outFormat.format(dtIn);
//parse it into a DateTime object if you need to interact with it as such

会给你你提到的格式。

于 2013-05-02T11:28:03.220 回答
11
于 2016-05-21T05:03:30.447 回答
0

对于在 java 中处理日期和时间的严肃工作,我建议使用比Calendar更好的实现。我会使用Joda,您可以在其中使用DateTimeFormatter

于 2013-05-02T11:21:59.453 回答
0

请使用此方法在没有任何库的情况下解析 ISO8601 日期。 http://www.java2s.com/Code/Java/Data-Type/ISO8601dateparsingutility.htm

public static Date parseISO8601Date(String input ) throws java.text.ParseException {

    //NOTE: SimpleDateFormat uses GMT[-+]hh:mm for the TZ which breaks
    //things a bit.  Before we go on we have to repair this.
    SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ssz" );

    //this is zero time so we need to add that TZ indicator for
    if ( input.endsWith( "Z" ) ) {
        input = input.substring( 0, input.length() - 1) + "GMT-00:00";
    } else {
        int inset = 6;

        String s0 = input.substring( 0, input.length() - inset );
        String s1 = input.substring( input.length() - inset, input.length() );

        input = s0 + "GMT" + s1;
    }

    return df.parse( input );

}
于 2016-09-09T11:34:11.273 回答