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)
OMG NO WARRENTY EXPRESSED OR IMPLIED!!!1
*/
//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)
s.setLenient(true);
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)
s.setLenient(true);
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 | | |