jeremias 2004/08/23 12:23:30 Modified: src/java/org/apache/fop/pdf PDFObject.java Log: Rewrite formatDateTime() to be compatible with JDK 1.3 again. Revision Changes Path 1.7 +43 -4 xml-fop/src/java/org/apache/fop/pdf/PDFObject.java Index: PDFObject.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/pdf/PDFObject.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- PDFObject.java 23 Apr 2004 03:05:11 -0000 1.6 +++ PDFObject.java 23 Aug 2004 19:23:30 -0000 1.7 @@ -22,7 +22,9 @@ import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Date; +import java.util.TimeZone; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -219,7 +221,7 @@ /** Formatting pattern for PDF date */ protected static final SimpleDateFormat DATE_FORMAT - = new SimpleDateFormat("'D:'yyyyMMddHHmmssZ"); + = new SimpleDateFormat("'D:'yyyyMMddHHmmss"); /** * Formats a date/time according to the PDF specification @@ -228,9 +230,46 @@ * @return the requested String representation */ protected String formatDateTime(Date time) { - String s = DATE_FORMAT.format(time); - int i = s.length() - 2; - return s.substring(0, i) + "'" + s.substring(i) + "'"; + StringBuffer sb = new StringBuffer(); + sb.append(DATE_FORMAT.format(time)); + TimeZone tz = TimeZone.getDefault(); + Calendar cal = Calendar.getInstance(); + cal.setTime(time); + + int era = cal.get(Calendar.ERA); + int year = cal.get(Calendar.YEAR); + int month = cal.get(Calendar.MONTH); + int day = cal.get(Calendar.DAY_OF_MONTH); + int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); + int milliseconds = cal.get(Calendar.HOUR_OF_DAY) * 1000 * 60 * 60; + milliseconds += cal.get(Calendar.MINUTE) * 1000 * 60; + milliseconds += cal.get(Calendar.SECOND) * 1000; + milliseconds += cal.get(Calendar.MILLISECOND); + + int offset = tz.getOffset(era, year, month, day, dayOfWeek, milliseconds); + if (offset == 0) { + sb.append('Z'); + } else { + if (offset > 0) { + sb.append('+'); + } else { + sb.append('-'); + } + final int HOUR = (1000 * 60 * 60); + int offsetHour = Math.abs(offset / HOUR); + int offsetMinutes = (offset - (offsetHour * HOUR)) / (1000 * 60); + if (offsetHour < 10) { + sb.append('0'); + } + sb.append(Integer.toString(offsetHour)); + sb.append('\''); + if (offsetMinutes < 10) { + sb.append('0'); + } + sb.append(Integer.toString(offsetMinutes)); + sb.append('\''); + } + return sb.toString(); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]