RFC3339 Date : Date « Date Type « Android

RFC3339 Date

I was working on an Atom (http://www.w3.org/2005/Atom) parser and discovered that I 
could not parse dates in the format defined by RFC 3339 using the  SimpleDateFormat 
class. The  reason was the ':' in the time  zone. This code strips out the colon if 
it's there and tries four different formats on the resulting string depending on if
it has a  time zone, or if it has a  fractional second part.  There is a probably a 
better way  to do this, and a more proper way.  But this is a really small addition 
to a  codebase  (You don't  need a jar, just throw  this  function in  some  static 
Utility class if you have one).

Feel free to use this in your code, but I'd appreciate it if you keep this note  in 
the code if you distribute it.  Thanks!

For  people  who might  be  googling: The date  format  parsed  by  this  goes  by: 
atomDateConstruct,  xsd:dateTime,  RFC3339  and  is compatable with: ISO.8601.1988, 
W3C.NOTE-datetime-19980827  and  W3C.REC-xmlschema-2-20041028   (that  I  know  of)

Copyright 2007, Chad Okere (ceothrow1 at gmail dotcom)

//package org.doubango.imsdroid.utils;

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

public class RFC3339Date {
  public static java.util.Date parseRFC3339Date(String datestring)
      throws java.text.ParseException, IndexOutOfBoundsException {
    Date d = new Date();

    // if there is no time zone, we don't need to do any special parsing.
    if (datestring.endsWith("Z")) {
      try {
        SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); // spec for RFC3339
        d = s.parse(datestring);
      } catch (java.text.ParseException pe) {// try again with optional decimals
        SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'");// spec for RFC3339 (with fractional seconds)
        d = s.parse(datestring);
      return d;

    // step one, split off the timezone.
    String firstpart = datestring.substring(0, datestring.lastIndexOf('-'));
    String secondpart = datestring.substring(datestring.lastIndexOf('-'));

    // step two, remove the colon from the timezone offset
    secondpart = secondpart.substring(0, secondpart.indexOf(':'))
        + secondpart.substring(secondpart.indexOf(':') + 1);
    datestring = firstpart + secondpart;
    SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");// spec for RFC3339
    try {
      d = s.parse(datestring);
    } catch (java.text.ParseException pe) {// try again with optional decimals
      s = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ");// spec for RFC3339 (with fractional seconds)
      d = s.parse(datestring);
    return d;



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.Formatting and parsing the various date formats we expect to encounter.
14.ISO8601, ISO8601, RFC822 Date format
15.Easter Date
16.Parse Date
17.compare Two dates with Day value
18.compare Two dates with Second value
19.Get start of a date
20.Get start date of a Month
21.Get start date of a year
22.Create date from year, month and day value
23.Create Date from year, month, day, hour, minute, second
24.Get year value from Date
25.Get Month value from Date
26.Get Day value from Date
27.Get now in Date and Millis-seconds
28.Add day, Month and year to a Date
29.Parse date in format of yyyyMMddHHmmss or yyyyMMdd
30.String to Date
31.Convert date value in long to YYYYMMDDHHMMSS format
32.Convert Date to Number
33.Get short and long date String
34.Convert Java Date To Xml Time
35.Convert dates to Julian dates.
36.Parse an RFC 822 date string.
37.Format a date into a format suitable for SQLite
38.Dot String to Date
39.Parses an RFC822 formatted date string.
40.Formats a Date according to RFC822.
41.DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date);
42.yyyy-MM-dd HH:mm:ss date format
43.Utility class for formatting and parsing the various date formats we expect to encounter.
44.Get a string representation of a date as it relates to the current time.
45.get Date String from milliseconds
46.Generate a ISO 8601 date
47.Generate a Calendar from ISO 8601 date
48.parse Date for list of possible formats
49.date To String
50.Get date string for Locale tr
51.Date formats
52.build 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