diff -r dee028db6e9b -r 73bdfa70b04e src/net/fortuna/ical4j/model/DateTime.java --- a/src/net/fortuna/ical4j/model/DateTime.java Tue Feb 10 19:25:00 2015 +0100 +++ b/src/net/fortuna/ical4j/model/DateTime.java Tue Feb 10 19:38:00 2015 +0100 @@ -42,7 +42,6 @@ import net.fortuna.ical4j.util.TimeZones; import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; /** * $Id$ @@ -161,6 +160,8 @@ private static final String DEFAULT_PATTERN = "yyyyMMdd'T'HHmmss"; private static final String UTC_PATTERN = "yyyyMMdd'T'HHmmss'Z'"; + + private static final String VCARD_PATTERN = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"; private static final String RELAXED_PATTERN = "yyyyMMdd"; @@ -195,10 +196,16 @@ private static final DateFormatCache RELAXED_FORMAT; static { final DateFormat format = new SimpleDateFormat(RELAXED_PATTERN); - format.setLenient(false); + format.setLenient(true); RELAXED_FORMAT = new DateFormatCache(format); } + private static final DateFormatCache VCARD_FORMAT; + static { + final DateFormat format = new SimpleDateFormat(VCARD_PATTERN); + VCARD_FORMAT = new DateFormatCache(format); + } + private Time time; private TimeZone timezone; @@ -305,8 +312,18 @@ setTimeZone(timezone); } } catch (ParseException pe) { - if (CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING)) { + if (CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_VCARD_COMPATIBILITY)) { + try { + setTime(value, (DateFormat) VCARD_FORMAT.get(), timezone); + setTimeZone(timezone); + } catch (ParseException pe2) { + if (CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING)) { + setTime(value, (DateFormat) RELAXED_FORMAT.get(), timezone); + setTimeZone(timezone); + } + } + } else if (CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING)) { setTime(value, (DateFormat) RELAXED_FORMAT.get(), timezone); setTimeZone(timezone); } else {