FileDocCategorySizeDatePackage
ISO8601DateFormat.javaAPI DocApache log4j 1.2.154353Sat Aug 25 00:09:40 BST 2007org.apache.log4j.helpers

ISO8601DateFormat

public class ISO8601DateFormat extends AbsoluteTimeDateFormat
Formats a {@link Date} in the format "yyyy-MM-dd HH:mm:ss,SSS" for example "1999-11-27 15:49:37,459".

Refer to the summary of the International Standard Date and Time Notation for more information on this format.

author
Ceki Gülcü
author
Andrew Vajoczki
since
0.7.5

Fields Summary
private static final long
serialVersionUID
private static long
lastTime
private static char[]
lastTimeString
Constructors Summary
public ISO8601DateFormat()


  
   
  
public ISO8601DateFormat(TimeZone timeZone)

    super(timeZone);
  
Methods Summary
public java.lang.StringBufferformat(java.util.Date date, java.lang.StringBuffer sbuf, java.text.FieldPosition fieldPosition)
Appends a date in the format "YYYY-mm-dd HH:mm:ss,SSS" to sbuf. For example: "1999-11-27 15:49:37,459".

param
sbuf the StringBuffer to write to


                                     
  
      
		        

    long now = date.getTime();
    int millis = (int)(now % 1000);

    if ((now - millis) != lastTime) {
      // We reach this point at most once per second
      // across all threads instead of each time format()
      // is called. This saves considerable CPU time.

      calendar.setTime(date);

      int start = sbuf.length();

      int year =  calendar.get(Calendar.YEAR);
      sbuf.append(year);

      String month;
      switch(calendar.get(Calendar.MONTH)) {
      case Calendar.JANUARY: month = "-01-"; break;
      case Calendar.FEBRUARY: month = "-02-";  break;
      case Calendar.MARCH: month = "-03-"; break;
      case Calendar.APRIL: month = "-04-";  break;
      case Calendar.MAY: month = "-05-"; break;
      case Calendar.JUNE: month = "-06-";  break;
      case Calendar.JULY: month = "-07-"; break;
      case Calendar.AUGUST: month = "-08-";  break;
      case Calendar.SEPTEMBER: month = "-09-"; break;
      case Calendar.OCTOBER: month = "-10-"; break;
      case Calendar.NOVEMBER: month = "-11-";  break;
      case Calendar.DECEMBER: month = "-12-";  break;
      default: month = "-NA-"; break;
      }
      sbuf.append(month);

      int day = calendar.get(Calendar.DAY_OF_MONTH);
      if(day < 10)
	sbuf.append('0");
      sbuf.append(day);

      sbuf.append(' ");

      int hour = calendar.get(Calendar.HOUR_OF_DAY);
      if(hour < 10) {
	sbuf.append('0");
      }
      sbuf.append(hour);
      sbuf.append(':");

      int mins = calendar.get(Calendar.MINUTE);
      if(mins < 10) {
	sbuf.append('0");
      }
      sbuf.append(mins);
      sbuf.append(':");

      int secs = calendar.get(Calendar.SECOND);
      if(secs < 10) {
	sbuf.append('0");
      }
      sbuf.append(secs);

      sbuf.append(',");

      // store the time string for next time to avoid recomputation
      sbuf.getChars(start, sbuf.length(), lastTimeString, 0);
      lastTime = now - millis;
    }
    else {
      sbuf.append(lastTimeString);
    }


    if (millis < 100)
      sbuf.append('0");
    if (millis < 10)
      sbuf.append('0");

    sbuf.append(millis);
    return sbuf;
  
public java.util.Dateparse(java.lang.String s, java.text.ParsePosition pos)
This method does not do anything but return null.

    return null;