Search code examples
javaandroiddatesimpledateformatandroid-date

Parse some string date to another format


I have problem formating date.

From : EEE, d MMM yyyy HH:mm:ss Z (example : Mon, 05 Jan 2014 15:10:00 +0200)

To : dd/MMM/yyyy HH:mm (example : 05/01/2014 15:10)

Here is what i tried :

private String formatDate(String date) {
    SimpleDateFormat format = new SimpleDateFormat("dd/MMM/yyyy HH:mm");
    Date dateResult = null;
    try {
        dateResult = format.parse(date);
    }
    catch (java.text.ParseException e) {
        Log.e(TAG, "", e);
    }
    return dateResult.toString();
}

I get exception : unparseable date at offset 0

some help would be nice here thanks ;)


Solution

  • You need two times converting. For example:

    private String formatDate(String date) {
        SimpleDateFormat formatFrom = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z ");
    
        java.util.Date tmpDate = formatFrom.parse(date);
        SimpleDateFormat formatTo = new SimpleDateFormat("dd/MMM/yyyy HH:mm");
        return formatTo.format(tmpDate);
    }
    

    For my own RSS parser I use the following code to parse different date formats:

        if (value.contains("+")) {
            value = value.substring(0, value.lastIndexOf("+") - 1);
        }
    
        String[] patterns = {//"EEE, dd MMM yyyy hh:mm:ss UTC",
                "yyyy.MM.dd G 'at' HH:mm:ss z",
                "EEE, MMM d, ''yy",
                "yyyyy.MMMMM.dd GGG hh:mm aaa",
                "EEE, d MMM yyyy HH:mm:ss Z",
                "yyMMddHHmmssZ",
                "d MMM yyyy HH:mm:ss z",
                "yyyy-MM-dd'T'HH:mm:ss",
                "yyyy-MM-dd'T'HH:mm:ss'Z'",
                "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
                "yyyy-MM-dd'T'HH:mm:ssZ",
                "yyyy-MM-dd'T'HH:mm:ss.SSSZ",
                "yyyy-MM-dd'T'HH:mm:ssz",
                "yyyy-MM-dd'T'HH:mm:ss.SSSz",
                "EEE, d MMM yy HH:mm:ssz",
                "EEE, d MMM yy HH:mm:ss",
                "EEE, d MMM yy HH:mm z",
                "EEE, d MMM yy HH:mm Z",
                "EEE, d MMM yyyy HH:mm:ss z",
                "EEE, d MMM yyyy HH:mm:ss Z",
                "EEE, d MMM yyyy HH:mm:ss ZZZZ",
                "EEE, d MMM yyyy HH:mm z",
                "EEE, d MMM yyyy HH:mm Z",
                "d MMM yy HH:mm z",
                "d MMM yy HH:mm:ss z",
                "d MMM yyyy HH:mm z",
                "d MMM yyyy HH:mm:ss z"};
    
        for (int i = 0; i < patterns.length; i++) {
            SimpleDateFormat sdf = new SimpleDateFormat(patterns[i], Locale.ENGLISH);
            try {
                pubdate = sdf.parse(value);
    
                break;
            } catch (Exception e) {
            }
        }