Date handling in Android development


SDK Version: 
M3

This unusual topic came around quite a few times in the last couple of days, first with our own rss parser, and today with android-xmlrpc.
In our rss parser, we wanted to have as much flexibility as possible, so we could use many types of localized rss pages, that have different date formats.

Here are a few examples, for different date formats:
20100715T1043:11Z
2010-07-15T10:43:11Z
20100715104311
2010. july 15.
2010-07-15 10:43:11

Here is the cheat sheet in the android docs for date syntax.
Today I started working on an xml reader, and I used the android-xmlrpc library. It was hard coded to work with only one kind of date format, luckily, the source code is also included, so it's possible to set up my own flavour of date format.
Here is a little snippet, from our rss date value parser. It works like this: first it tries our custom SimpleDateFormat, than it tries several DateFormats.

  1. //usually we use this format
  2. SimpleDateFormat mSimpleDateFormat=new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");
  3.  
  4. item.getChild(PUB_DATE).setEndTextElementListener(new EndTextElementListener() {
  5.    public void end(String body) {
  6.        try {//first try our own format
  7.            mRssItem.mPublicationDate = mSimpleDateFormat.parse(body);
  8.        } catch (ParseException e4) {//if it fails, try other formats
  9.            DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, Locale.ENGLISH);
  10.            try {
  11.                mRssItem.mPublicationDate = df.parse(body);
  12.            } catch (ParseException e) {
  13.                df = DateFormat.getDateInstance(DateFormat.LONG, Locale.ENGLISH);
  14.                try {
  15.                    mRssItem.mPublicationDate = df.parse(body);
  16.                } catch (ParseException e1) {
  17.                    df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.ENGLISH);
  18.                    try {
  19.                        mRssItem.mPublicationDate = df.parse(body);
  20.                    } catch (ParseException e2) {
  21.                        df = DateFormat.getDateInstance(DateFormat.SHORT,Locale.ENGLISH);
  22.                        try {
  23.                            mRssItem.mPublicationDate = df.parse(body);
  24.                        } catch (ParseException e3) {
  25.                           // TODO log input format error
  26.                        }
  27.                    }
  28.                }
  29.            }
  30.        }
  31.    }
  32. });

Comments

I like this concept. I visited your blog for the first time and just been your fan. Keep posting as I am gonna come to read it everyday.Cleaning Companies London

I’ll stumble across a post like this and I’ll recall that there really are still interesting pages on the web. ^_^. parduotuvė

Valuable information,,,,

Nikmaya John

Friendzone

thanks guys... Helpful..

Nikmaya John

Friendzone

توبيكات نونو
توبيكات
توبيكات سعودي

توبيكات 2012

توبيكات بنات

العاب نونو

العاب

العاب بنات

games

شات لمني الصوتي

دردشة لمني الصوتية

شات صوتي لمني

شات صوتي

دردشة صوتية

دردشة

دردشه

شات سعودي

شات خليجي
سكر بنات

جات

شات صوتي سعودي خليجي

chat voice

ahj

خليجي الصوتي

سعودي الصوتي

دردشة صوتي

شات صوتي
دردشة صوتية
شات كتابي

شات كتابي خليجي

شات عسل الصوتي

دردشة كتابية

chat
سعودي كول
سعودي كول 6666

كول

سعودي

سعودي كول انحراف

سعودي كول بنات

سعودي كول 1994

chat saudi col ‏

شات سعودي كول

سعودي انحراف

سعودي انحراف2010

سعودي انحراف الصوتي

شات سعودي انحراف

دردشة سعودي انحراف

سعودي انحراف الصوتية

شبكة سعودي انحراف

سعودي انحراف الاصلي

سعودي انحراف كول

سعودي انحراف 2010

انحراف سعودي

saudideviation

دردشة صوتية سعوديه
دردشة صوتية سعودية

دردشة كتابية
دردشة كتابية خليجية
شات
دردشة
خاص للبنات

عرب ذوق

عرب ذوق الصوتي

عرب ذوق الصوتية

دردشة عرب ذوق

شات عرب ذوق

شبكة عرب ذوق

شات صوتي بنات

شات بنات الصوتي

دردشة بنات الصوتي

Girls Chat

شبكة عفناك

صوتية عفناك

شات عفناك

دردشة عفناك

عفناك الصوتي

دردشة عفناك

الخيال
الخيال كام
شبكة الخيال
الخيال الصوتي
الخيال الصوتية
دردشة الخيال
الخيال الصوتية
دردشة صوتية الخيال

شات سعودي خليجي

منتدى نونو

منتدى

منتديات

موقع

شبكة

نونو

Chat Nono

ahj w,jd

]v]am w,jdm

دليل مواقع ويب

دليل مواقع

دليل

مواقع

بنت كول
بنت كول الصوتي
شات بنت كول

دردشة بنت كول
شات بنت كول الصوتية

بنت كول الصوتيه
سعودي كول
صوتية سعودي كول
شات سعودي كول
دردشة سعودي كول
سعودي كول الصوتي
سعودي كول 6666
سعودي كول6666
سكر بنات
شات صوتي زين
شات صوتي ملوك
شات صوتي سعودي
شاتات صوتيه
مكتبة ماسنجر
شات صوتي حبي
شات صوتي كويت
YouTube - Broadcast Yourself.‏ , اليوتيوب نونو
صيف كام
شات صوتي كول
شات انحراف
وه بس
خريطة الموقع نونو
الرياض كول الصوتي
كامات 6666
شات المها
كامات6666
شات كامات 6666
كامات 666
كامات 66
سعودي انحراف
شاتكامات6666
سعودي احوه
شات سعودي احوه
سعودي احوه الصوتي
سعودي احوه كول
دردشة سعودي احوه
احوه سعودي
بنات احوه
دبي الصوتي
سعودي في اي بي الصوتي
شبكة الرياض الصوتي
روعة الليل
لايف كام
الخليج كام
شات كان زمان الصوتي
شات صوتي قصيمي
شات قلبي
ارجوان
شات صوتي قطري
بدور الخليج

منتدى روح

شبكة روح

روح ديزاين

تحميل ماسنجر بلس

توبيكات حزينه

توبيكات

ماسنجر

ماسنجر بلس

تحميل ماسنجر

توبيكات رومنسيه

منتديات روح
دردشة
شات سعودي
خليجي
شات صوتي
توبيك
موقع توبيكات
سعودي كول 6666
سعودي انحراف 2011

سعودي كول
سعودي انحراف

Thanks, Alternate Implementation, for sharing an alterantive way )
John from application development services

We have a similar issue on an application, where we might see 3-4 different date formats. We created an array of SimpleDateFormat instances, ordered by most common format, and iterate through the array until we are able to parse the date. An example

  1. public static final DateFormat TIME_12HR_FORMAT = new SimpleDateFormat("h:mm a");
  2. public static final DateFormat TIME_12HR_FORMAT_LOCAL = new SimpleDateFormat("h:mm a");
  3. public static final DateFormat TIME_24HR_FORMAT_UTC = new SimpleDateFormat("HH:mm") {
  4.         private static final long serialVersionUID = 1L;
  5.         {
  6.                 setTimeZone(TimeZone.getTimeZone("UTC"));
  7.         }
  8. };
  9. public static final DateFormat TIME_24HR_FORMAT_HMS = new SimpleDateFormat("HH:mm:ss");
  10. public static final DateFormat TIME_24HR_FORMAT_HM = new SimpleDateFormat("HH:mm");
  11.  
  12. private static final DateFormat[] SUPPORTED_TIME_FORMATS = new DateFormat[] { TIME_24HR_FORMAT_HM, TIME_24HR_FORMAT_HMS, TIME_12HR_FORMAT };
  13.  
  14. private static Date parseMultiSimpleDateFormat(String date, DateFormat[] formatList) {
  15.         for (DateFormat element : formatList) {
  16.                 try {
  17.                         return element.parse(date);
  18.                 } catch (ParseException e) {
  19.                         Log.e(PartnerServiceConstants.LOG_TAG, e.toString());
  20.                         return null;
  21.                 }
  22.         }
  23.         return null;
  24. }
  25.  
  26. Date parsedDate = parseMultiSimpleDateFormat("03:10 AM", SUPPORTED_TIME_FORMATS);