Formatting and parsing the various date formats we expect to encounter. : Date « Date Type « Android

Formatting and parsing the various date formats we expect to encounter.


 * $Id: 109 2007-12-19 07:04:18Z jasta00 $
 * Copyright (C) 2006 Josh Guilfoyle <>
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2, or (at your option) any
 * later version.
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * General Public License for more details.
 * Code lifted from Informa <>.

//package com.dreamcode.anfeedreader.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

import android.util.Log;

 * Utility class for formatting and parsing the various date formats we expect
 * to encounter.
public class DateUtils{
  private static final String TAG = "DateUtils";
  private static final SimpleDateFormat[] dateFormats;
  private static final int dateFormat_default = 7;

  private DateUtils() { }

      final String[] possibleDateFormats =
        "EEE, dd MMM yyyy HH:mm:ss z", // RFC_822
        "EEE, dd MMM yyyy HH:mm zzzz",
        "yyyy-MM-dd'T'HH:mm:ss.SSSzzzz", // Blogger Atom feed has millisecs also
        "yyyy-MM-dd'T'HH:mm:ss z",
        "yyyy-MM-dd'T'HH:mm:ssz", // ISO_8601

      dateFormats = new SimpleDateFormat[possibleDateFormats.length];
      TimeZone gmtTZ = TimeZone.getTimeZone("GMT");

      for (int i = 0; i < possibleDateFormats.length; i++)
        /* TODO: Support other locales? */
        dateFormats[i] = new SimpleDateFormat(possibleDateFormats[i],


   * Parse a date string.  The format of RSS/Atom dates come in many
   * different forms, so this method is extremely flexible and attempts to
   * understand many different formats.
   * Copied verbatim from Informa 0.7.0-alpha2,
   * @param strdate
   *   Date string to attempt to parse.
   * @return
   *   If successful, returns a {@link Date} object representing the parsed
   *   date; otherwise, null.
  public static Date parseDate(String strdate)
    Date result = null;
    strdate = strdate.trim();
    if (strdate.length() > 10) {

      // TODO deal with +4:00 (no zero before hour)
      if ((strdate.substring(strdate.length() - 5).indexOf("+") == 0 || strdate
          .substring(strdate.length() - 5).indexOf("-") == 0)
          && strdate.substring(strdate.length() - 5).indexOf(":") == 2) {

        String sign = strdate.substring(strdate.length() - 5,
            strdate.length() - 4);

        strdate = strdate.substring(0, strdate.length() - 5) + sign + "0"
        + strdate.substring(strdate.length() - 4);
        // logger.debug("CASE1 : new date " + strdate + " ? "
        //    + strdate.substring(0, strdate.length() - 5));


      String dateEnd = strdate.substring(strdate.length() - 6);

      // try to deal with -05:00 or +02:00 at end of date
      // replace with -0500 or +0200
      if ((dateEnd.indexOf("-") == 0 || dateEnd.indexOf("+") == 0)
          && dateEnd.indexOf(":") == 3) {
        // TODO deal with GMT-00:03
        if ("GMT".equals(strdate.substring(strdate.length() - 9, strdate
            .length() - 6))) {
          Log.d(TAG, "General time zone with offset, no change");
        } else {
          // continue treatment
          String oldDate = strdate;
          String newEnd = dateEnd.substring(0, 3) + dateEnd.substring(4);
          strdate = oldDate.substring(0, oldDate.length() - 6) + newEnd;
          // logger.debug("!!modifying string ->"+strdate);
    int i = 0;
    while (i < dateFormats.length) {
      try {
        result = dateFormats[i].parse(strdate);
        // logger.debug("******Parsing Success "+strdate+"->"+result+" with
        // "+dateFormats[i].toPattern());
      } catch (java.text.ParseException eA) {

    return result;

   * Format a date in a manner that would be most suitable for serialized
   * storage.
   * @param date
   *   {@link Date} object to format.
   * @return
   *   Robust, formatted date string.
  public static String formatDate(Date date)
    return dateFormats[dateFormat_default].format(date);


Related examples in the same category

1.Write Date to AudioTrack
2.Represents a date using an integer, in a similar fashion to the implementation in Microsoft Excel.
3.A formatter that formats dates to show the elapsed time relative to some base date.
4.Iso Date
5.Get the string of the date using format "yyyy-MM-dd HH:mm:ss"
6.Parse a string that contains date, return a date object using format "yyyy-MM-dd HH:mm:ss"
7.Create Date from timestamp
8.Convert date in RFC2822 and UTC strings, and to build Date from string of dates in RFC2822 and UTC format
9.Gets a "HH:mm:ss.SSS EEE dd MMM yyyy" representation of a Date
10.Gets a "yyyy MMM dd, HH:mm:ss.SSS" representation of a Date
11.Gets a "EEE, dd MMM yyyy hh:mm:ss 'GMT'" representation of a Date
12.Parses a String for a "EEE, dd MMM yyyy hh:mm:ss 'GMT'" formatted Date
13.ISO8601, ISO8601, RFC822 Date format
14.Easter Date
15.Parse Date Two dates with Day value Two dates with Second value
18.Get start of a date
19.Get start date of a Month
20.Get start date of a year
21.Create date from year, month and day value
22.Create Date from year, month, day, hour, minute, second
23.Get year value from Date
24.Get Month value from Date
25.Get Day value from Date
26.Get now in Date and Millis-seconds
27.Add day, Month and year to a Date
28.Parse date in format of yyyyMMddHHmmss or yyyyMMdd
29.String to Date
30.Convert date value in long to YYYYMMDDHHMMSS format
31.Convert Date to Number
32.Get short and long date String
33.Convert Java Date To Xml Time
34.Convert dates to Julian dates.
35.Parse an RFC 822 date string.
36.Format a date into a format suitable for SQLite
37.Dot String to Date
38.Parses an RFC822 formatted date string.
39.Formats a Date according to RFC822.
40.DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date);
41.yyyy-MM-dd HH:mm:ss date format
42.Utility class for formatting and parsing the various date formats we expect to encounter.
43.Get a string representation of a date as it relates to the current time.
44.get Date String from milliseconds
45.Generate a ISO 8601 date
46.Generate a Calendar from ISO 8601 date
47.parse Date for list of possible formats To String
49.Get date string for Locale tr
50.RFC3339 Date
51.Date formats Date Format day-of-week Short
53.Get end of each day
54.Get the end of each Month
55.Get end of a year
56.calculate Month Distance
57.calculate Day Distance
58.The month, and just the month, is zero-based. Add 1 for display.
59.Get hour different
60.format Millis Into Human Readable