/** * Format a date into 'yyyy-MM-ddThh:mm:ss[.sss]Z' (GMT timezone) * * @param date the date to format * @param millis true to include millis precision otherwise false * @return the date formatted as 'yyyy-MM-ddThh:mm:ss[.sss]Z' */ public static String format(Date date, boolean millis) { return format(date, millis, TIMEZONE_Z); }
@Override public Date parse(String source, ParsePosition pos) { try { return ISO8601Utils.parse(source, pos); } catch (ParseException e) { return null; } }
int year = parseInt(date, offset, offset += 4); if (checkOffset(date, offset, '-')) { offset += 1; int month = parseInt(date, offset, offset += 2); if (checkOffset(date, offset, '-')) { offset += 1; int day = parseInt(date, offset, offset += 2); boolean hasT = checkOffset(date, offset, 'T'); hour = parseInt(date, offset += 1, offset += 2); if (checkOffset(date, offset, ':')) { offset += 1; minutes = parseInt(date, offset, offset += 2); if (checkOffset(date, offset, ':')) { offset += 1; char c = date.charAt(offset); if (c != 'Z' && c != '+' && c != '-') { seconds = parseInt(date, offset, offset += 2); if (seconds > 59 && seconds < 63) seconds = 59; // truncate up to 3 leap seconds if (checkOffset(date, offset, '.')) { offset += 1; int endOffset = indexOfNonDigit(date, offset + 1); // assume at least one digit int parseEndOffset = Math.min(endOffset, offset + 3); // parse up to 3 digits
int year = parseInt(date, offset, offset += 4); checkOffset(date, offset, '-'); int month = parseInt(date, offset += 1, offset += 2); checkOffset(date, offset, '-'); int day = parseInt(date, offset += 1, offset += 2); checkOffset(date, offset, 'T'); int hour = parseInt(date, offset += 1, offset += 2); checkOffset(date, offset, ':'); int minutes = parseInt(date, offset += 1, offset += 2); checkOffset(date, offset, ':'); int seconds = parseInt(date, offset += 1, offset += 2); checkOffset(date, offset, '.'); milliseconds = parseInt(date, offset += 1, offset += 3);
int year = parseInt(date, offset, offset += 4); checkOffset(date, offset, '-'); int month = parseInt(date, offset += 1, offset += 2); checkOffset(date, offset, '-'); int day = parseInt(date, offset += 1, offset += 2); checkOffset(date, offset, 'T'); int hour = parseInt(date, offset += 1, offset += 2); checkOffset(date, offset, ':'); int minutes = parseInt(date, offset += 1, offset += 2); checkOffset(date, offset, ':'); int seconds = parseInt(date, offset += 1, offset += 2); checkOffset(date, offset, '.'); milliseconds = parseInt(date, offset += 1, offset += 3);
/** * Format a date into 'yyyy-MM-ddThh:mm:ssZ' (default timezone, no milliseconds precision) * * @param date the date to format * @return the date formatted as 'yyyy-MM-ddThh:mm:ssZ' */ public static String format(Date date) { return format(date, false, TIMEZONE_Z); }
@Override public Date parse(String source) throws ParseException { return ISO8601Utils.parse(source, new ParsePosition(0)); }
int year = parseInt(date, offset, offset += 4); if (checkOffset(date, offset, '-')) { offset += 1; int month = parseInt(date, offset, offset += 2); if (checkOffset(date, offset, '-')) { offset += 1; int day = parseInt(date, offset, offset += 2); boolean hasT = checkOffset(date, offset, 'T'); hour = parseInt(date, offset += 1, offset += 2); if (checkOffset(date, offset, ':')) { offset += 1; minutes = parseInt(date, offset, offset += 2); if (checkOffset(date, offset, ':')) { offset += 1; char c = date.charAt(offset); if (c != 'Z' && c != '+' && c != '-') { seconds = parseInt(date, offset, offset += 2); if (seconds > 59 && seconds < 63) seconds = 59; // truncate up to 3 leap seconds if (checkOffset(date, offset, '.')) { offset += 1; int endOffset = indexOfNonDigit(date, offset + 1); // assume at least one digit int parseEndOffset = Math.min(endOffset, offset + 3); // parse up to 3 digits
int year = parseInt(date, offset, offset += 4); if (checkOffset(date, offset, '-')) { offset += 1; int month = parseInt(date, offset, offset += 2); if (checkOffset(date, offset, '-')) { offset += 1; int day = parseInt(date, offset, offset += 2); boolean hasT = checkOffset(date, offset, 'T'); hour = parseInt(date, offset += 1, offset += 2); if (checkOffset(date, offset, ':')) { offset += 1; minutes = parseInt(date, offset, offset += 2); if (checkOffset(date, offset, ':')) { offset += 1; char c = date.charAt(offset); if (c != 'Z' && c != '+' && c != '-') { seconds = parseInt(date, offset, offset += 2); if (checkOffset(date, offset, '.')) { milliseconds = parseInt(date, offset += 1, offset += 3);
@Override public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { String value = ISO8601Utils.format(date, true); toAppendTo.append(value); return toAppendTo; }
@Override public Date parse(String source, ParsePosition pos) { try { return ISO8601Utils.parse(source, pos); } catch (ParseException e) { return null; } }
int year = parseInt(date, offset, offset += 4); if (checkOffset(date, offset, '-')) { offset += 1; int month = parseInt(date, offset, offset += 2); if (checkOffset(date, offset, '-')) { offset += 1; int day = parseInt(date, offset, offset += 2); boolean hasT = checkOffset(date, offset, 'T'); hour = parseInt(date, offset += 1, offset += 2); if (checkOffset(date, offset, ':')) { offset += 1; minutes = parseInt(date, offset, offset += 2); if (checkOffset(date, offset, ':')) { offset += 1; char c = date.charAt(offset); if (c != 'Z' && c != '+' && c != '-') { seconds = parseInt(date, offset, offset += 2); if (seconds > 59 && seconds < 63) seconds = 59; // truncate up to 3 leap seconds if (checkOffset(date, offset, '.')) { offset += 1; int endOffset = indexOfNonDigit(date, offset + 1); // assume at least one digit int parseEndOffset = Math.min(endOffset, offset + 3); // parse up to 3 digits
int year = parseInt(date, offset, offset += 4); if (checkOffset(date, offset, '-')) { offset += 1; int month = parseInt(date, offset, offset += 2); if (checkOffset(date, offset, '-')) { offset += 1; int day = parseInt(date, offset, offset += 2); boolean hasT = checkOffset(date, offset, 'T'); hour = parseInt(date, offset += 1, offset += 2); if (checkOffset(date, offset, ':')) { offset += 1; minutes = parseInt(date, offset, offset += 2); if (checkOffset(date, offset, ':')) { offset += 1; char c = date.charAt(offset); if (c != 'Z' && c != '+' && c != '-') { seconds = parseInt(date, offset, offset += 2); if (checkOffset(date, offset, '.')) { milliseconds = parseInt(date, offset += 1, offset += 3);
@Override public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { toAppendTo.append(ISO8601Utils.format(date)); return toAppendTo; }
@Override public Date parse(String source, ParsePosition pos) { try { return ISO8601Utils.parse(source, pos); } catch (ParseException e) { return null; } }
@Deprecated // since 2.9 public static String format(Date date, boolean millis, TimeZone tz) { return format(date, millis, tz, Locale.US); }
@Override public Date parse(String source, ParsePosition pos) { try { return ISO8601Utils.parse(source, pos); } catch (ParseException e) { return null; } }
@Override public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { String value = ISO8601Utils.format(date, true); toAppendTo.append(value); return toAppendTo; }
@Override public Date parse(String source, ParsePosition pos) { try { return ISO8601Utils.parse(source, pos); } catch (ParseException e) { return null; } }
@Override public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { String value = com.fasterxml.jackson.databind.util.ISO8601Utils.format(date, true); toAppendTo.append(value); return toAppendTo; } });