/** * This is a convenience method that will get the dictionary object that is expected to be a name and convert it to * a string. Null is returned if the entry does not exist in the dictionary or if the date was invalid. * * @param key The key to the item in the dictionary. * @return The name converted to a date. */ public Calendar getDate(COSName key) { COSBase base = getDictionaryObject(key); if (base instanceof COSString) { return DateConverter.toCalendar((COSString) base); } return null; }
/** * Set the date object. * * @param key The key to the date. * @param date The date to set. */ public void setDate(COSName key, Calendar date) { setString(key, DateConverter.toString(date)); }
TimeZone tz = new SimpleTimeZone(0, "GMT"); int tzHours, tzMin; char sign = skipOptionals(text, where, "Z+- "); boolean hadGMT = (sign == 'Z' || skipString(text, "GMT", where) || skipString(text, "UTC", where)); sign = (!hadGMT) ? sign : skipOptionals(text, where, "+- "); tzHours = parseTimeField(text, where, 2, -999); skipOptionals(text, where, "\': "); tzMin = parseTimeField(text, where, 2, 0); skipOptionals(text, where, "\' "); tz.setRawOffset(restrainTZoffset(hrSign * (tzHours * MILLIS_PER_HOUR + tzMin * (long) MILLIS_PER_MINUTE))); updateZoneId(tz); adjustTimeZoneNicely(cal, tz); initialWhere.setIndex(where.getIndex()); return true;
int year = parseTimeField(text, where, 4, 0); if (where.getIndex() != 4 + initialWhere.getIndex()) skipOptionals(text, where, "/- "); int month = parseTimeField(text, where, 2, 1) - 1; // Calendar months are 0...11 skipOptionals(text, where, "/- "); int day = parseTimeField(text, where, 2, 1); skipOptionals(text, where, " T"); int hour = parseTimeField(text, where, 2, 0); skipOptionals(text, where, ": "); int minute = parseTimeField(text, where, 2, 0); skipOptionals(text, where, ": "); int second = parseTimeField(text, where, 2, 0); char nextC = skipOptionals(text, where, "."); if (nextC == '.') parseTimeField(text, where, 19, 0); GregorianCalendar dest = newGreg(); try skipOptionals(text, initialWhere, " ");
/** * Returns the Calendar for a given string containing a date, * or {@code null} if it cannot be parsed. * * The returned value will have 0 for DST_OFFSET. * * @param text A COS string containing a date. * @return The Calendar that the text string represents, or {@code null} if it cannot be parsed. */ public static Calendar toCalendar(String text) { if (text == null || text.trim().isEmpty()) { return null; } ParsePosition where = new ParsePosition(0); skipOptionals(text, where, " "); skipString(text, "D:", where); Calendar calendar = parseDate(text, where); if (calendar == null || where.getIndex() != text.length()) { // the date string is invalid return null; } return calendar; } }
private static GregorianCalendar parseSimpleDate(String text, String[] fmts, ParsePosition initialWhere) { for(String fmt : fmts) { ParsePosition where = new ParsePosition(initialWhere.getIndex()); SimpleDateFormat sdf = new SimpleDateFormat(fmt, Locale.ENGLISH); GregorianCalendar retCal = newGreg(); sdf.setCalendar(retCal); if (sdf.parse(text, where) != null) { initialWhere.setIndex(where.getIndex()); skipOptionals(text, initialWhere, " "); return retCal; } } return null; }
skipOptionals(text, where, " "); int startPosition = where.getIndex(); GregorianCalendar retCal = parseBigEndianDate(text, where); parseTZoffset(text, retCal, where))) ? DIGIT_START_FORMATS : ALPHA_START_FORMATS; retCal = parseSimpleDate(text, formats, where); parseTZoffset(text, retCal, where)))
/** * Convert string representation of date to * string representation of date in PDF format * * @param date passed date * @return PDF string representation of passed date */ public static String toPDFFormat(String date) { Calendar buffer = org.apache.pdfbox.util.DateConverter.toCalendar(date); buffer.setTimeZone(TimeZone.getTimeZone("UTC")); return org.apache.pdfbox.util.DateConverter.toString(buffer); }
/** * Converts the date to ISO 8601 string format: * yyyy-mm-ddThh:MM:ss#hh:mm (where '#" is '+' or '-'). * * @param cal The date to convert. Must not be null. * The DST_OFFSET is included in the output value. * * @return The date represented as an ISO 8601 string. */ public static String toISO8601(Calendar cal) { String offset = formatTZoffset(cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET), ":"); return String.format(Locale.US, "%1$4tY" // yyyy + "-%1$2tm" // -mm (%tm adds one to cal month value) + "-%1$2td" // -dd (%tm adds one to cal month value) + "T" // T + "%1$2tH:%1$2tM:%1$2tS" // HHmmss + "%2$s", // time zone cal, offset); }
skipOptionals(text, where, " "); int startPosition = where.getIndex(); GregorianCalendar retCal = parseBigEndianDate(text, where); parseTZoffset(text, retCal, where))) ? DIGIT_START_FORMATS : ALPHA_START_FORMATS; retCal = parseSimpleDate(text, formats, where); parseTZoffset(text, retCal, where)))
/** * Returns the Calendar for a given string containing a date, * or {@code null} if it cannot be parsed. * * The returned value will have 0 for DST_OFFSET. * * @param text A COS string containing a date. * @return The Calendar that the text string represents, or {@code null} if it cannot be parsed. */ public static Calendar toCalendar(String text) { if (text == null || text.trim().isEmpty()) { return null; } ParsePosition where = new ParsePosition(0); skipOptionals(text, where, " "); skipString(text, "D:", where); Calendar calendar = parseDate(text, where); if (calendar == null || where.getIndex() != text.length()) { // the date string is invalid return null; } return calendar; } }
int year = parseTimeField(text, where, 4, 0); if (where.getIndex() != 4 + initialWhere.getIndex()) skipOptionals(text, where, "/- "); int month = parseTimeField(text, where, 2, 1) - 1; // Calendar months are 0...11 skipOptionals(text, where, "/- "); int day = parseTimeField(text, where, 2, 1); skipOptionals(text, where, " T"); int hour = parseTimeField(text, where, 2, 0); skipOptionals(text, where, ": "); int minute = parseTimeField(text, where, 2, 0); skipOptionals(text, where, ": "); int second = parseTimeField(text, where, 2, 0); char nextC = skipOptionals(text, where, "."); if (nextC == '.') parseTimeField(text, where, 19, 0); GregorianCalendar dest = newGreg(); try skipOptionals(text, initialWhere, " ");
private static GregorianCalendar parseSimpleDate(String text, String[] fmts, ParsePosition initialWhere) { for(String fmt : fmts) { ParsePosition where = new ParsePosition(initialWhere.getIndex()); SimpleDateFormat sdf = new SimpleDateFormat(fmt, Locale.ENGLISH); GregorianCalendar retCal = newGreg(); sdf.setCalendar(retCal); if (sdf.parse(text, where) != null) { initialWhere.setIndex(where.getIndex()); skipOptionals(text, initialWhere, " "); return retCal; } } return null; }
/** * Converts a Calendar to a string formatted as: * D:yyyyMMddHHmmss#hh'mm' where # is Z, +, or -. * * @param cal The date to convert to a string. May be null. * The DST_OFFSET is included when computing the output time zone. * * @return The date as a String to be used in a PDF document, * or null if the cal value is null */ public static String toString(Calendar cal) { if (cal == null) { return null; } String offset = formatTZoffset(cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET), "'"); return String.format(Locale.US, "D:" + "%1$4tY%1$2tm%1$2td" // yyyyMMdd + "%1$2tH%1$2tM%1$2tS" // HHmmss + "%2$s" // time zone + "'", // trailing apostrophe cal, offset); }
TimeZone tz = new SimpleTimeZone(0, "GMT"); int tzHours, tzMin; char sign = skipOptionals(text, where, "Z+- "); boolean hadGMT = (sign == 'Z' || skipString(text, "GMT", where) || skipString(text, "UTC", where)); sign = (!hadGMT) ? sign : skipOptionals(text, where, "+- "); tzHours = parseTimeField(text, where, 2, -999); skipOptionals(text, where, "\': "); tzMin = parseTimeField(text, where, 2, 0); skipOptionals(text, where, "\' "); tz.setRawOffset(restrainTZoffset(hrSign * (tzHours * MILLIS_PER_HOUR + tzMin * (long) MILLIS_PER_MINUTE))); updateZoneId(tz); adjustTimeZoneNicely(cal, tz); initialWhere.setIndex(where.getIndex()); return true;
/** * Returns the Calendar for a given COS string containing a date, * or {@code null} if it cannot be parsed. * * The returned value will have 0 for DST_OFFSET. * * @param text A COS string containing a date. * @return The Calendar that the text string represents, or {@code null} if it cannot be parsed. */ public static Calendar toCalendar(COSString text) { if (text == null) { return null; } return toCalendar(text.getString()); }
skipOptionals(text, where, " "); int startPosition = where.getIndex(); GregorianCalendar retCal = parseBigEndianDate(text, where); parseTZoffset(text, retCal, where))) ? DIGIT_START_FORMATS : ALPHA_START_FORMATS; retCal = parseSimpleDate(text, formats, where); parseTZoffset(text, retCal, where)))
/** * Returns the Calendar for a given string containing a date, * or {@code null} if it cannot be parsed. * * The returned value will have 0 for DST_OFFSET. * * @param text A COS string containing a date. * @return The Calendar that the text string represents, or {@code null} if it cannot be parsed. */ public static Calendar toCalendar(String text) { if (text == null || text.trim().isEmpty()) { return null; } ParsePosition where = new ParsePosition(0); skipOptionals(text, where, " "); skipString(text, "D:", where); Calendar calendar = parseDate(text, where); if (calendar == null || where.getIndex() != text.length()) { // the date string is invalid return null; } return calendar; } }
int year = parseTimeField(text, where, 4, 0); if (where.getIndex() != 4 + initialWhere.getIndex()) skipOptionals(text, where, "/- "); int month = parseTimeField(text, where, 2, 1) - 1; // Calendar months are 0...11 skipOptionals(text, where, "/- "); int day = parseTimeField(text, where, 2, 1); skipOptionals(text, where, " T"); int hour = parseTimeField(text, where, 2, 0); skipOptionals(text, where, ": "); int minute = parseTimeField(text, where, 2, 0); skipOptionals(text, where, ": "); int second = parseTimeField(text, where, 2, 0); char nextC = skipOptionals(text, where, "."); if (nextC == '.') parseTimeField(text, where, 19, 0); GregorianCalendar dest = newGreg(); try skipOptionals(text, initialWhere, " ");
private static GregorianCalendar parseSimpleDate(String text, String[] fmts, ParsePosition initialWhere) { for(String fmt : fmts) { ParsePosition where = new ParsePosition(initialWhere.getIndex()); SimpleDateFormat sdf = new SimpleDateFormat(fmt, Locale.ENGLISH); GregorianCalendar retCal = newGreg(); sdf.setCalendar(retCal); if (sdf.parse(text, where) != null) { initialWhere.setIndex(where.getIndex()); skipOptionals(text, initialWhere, " "); return retCal; } } return null; }