1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.log4j.helpers;
19
20 import java.util.Calendar;
21 import java.util.TimeZone;
22 import java.util.Date;
23 import java.text.FieldPosition;
24 import java.text.ParsePosition;
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 public class ISO8601DateFormat extends AbsoluteTimeDateFormat {
43 private static final long serialVersionUID = -759840745298755296L;
44
45 public
46 ISO8601DateFormat() {
47 }
48
49 public
50 ISO8601DateFormat(TimeZone timeZone) {
51 super(timeZone);
52 }
53
54 static private long lastTime;
55 static private char[] lastTimeString = new char[20];
56
57
58
59
60
61
62
63 public
64 StringBuffer format(Date date, StringBuffer sbuf,
65 FieldPosition fieldPosition) {
66
67 long now = date.getTime();
68 int millis = (int)(now % 1000);
69
70 if ((now - millis) != lastTime || lastTimeString[0] == 0) {
71
72
73
74
75 calendar.setTime(date);
76
77 int start = sbuf.length();
78
79 int year = calendar.get(Calendar.YEAR);
80 sbuf.append(year);
81
82 String month;
83 switch(calendar.get(Calendar.MONTH)) {
84 case Calendar.JANUARY: month = "-01-"; break;
85 case Calendar.FEBRUARY: month = "-02-"; break;
86 case Calendar.MARCH: month = "-03-"; break;
87 case Calendar.APRIL: month = "-04-"; break;
88 case Calendar.MAY: month = "-05-"; break;
89 case Calendar.JUNE: month = "-06-"; break;
90 case Calendar.JULY: month = "-07-"; break;
91 case Calendar.AUGUST: month = "-08-"; break;
92 case Calendar.SEPTEMBER: month = "-09-"; break;
93 case Calendar.OCTOBER: month = "-10-"; break;
94 case Calendar.NOVEMBER: month = "-11-"; break;
95 case Calendar.DECEMBER: month = "-12-"; break;
96 default: month = "-NA-"; break;
97 }
98 sbuf.append(month);
99
100 int day = calendar.get(Calendar.DAY_OF_MONTH);
101 if(day < 10)
102 sbuf.append('0');
103 sbuf.append(day);
104
105 sbuf.append(' ');
106
107 int hour = calendar.get(Calendar.HOUR_OF_DAY);
108 if(hour < 10) {
109 sbuf.append('0');
110 }
111 sbuf.append(hour);
112 sbuf.append(':');
113
114 int mins = calendar.get(Calendar.MINUTE);
115 if(mins < 10) {
116 sbuf.append('0');
117 }
118 sbuf.append(mins);
119 sbuf.append(':');
120
121 int secs = calendar.get(Calendar.SECOND);
122 if(secs < 10) {
123 sbuf.append('0');
124 }
125 sbuf.append(secs);
126
127 sbuf.append(',');
128
129
130 sbuf.getChars(start, sbuf.length(), lastTimeString, 0);
131 lastTime = now - millis;
132 }
133 else {
134 sbuf.append(lastTimeString);
135 }
136
137
138 if (millis < 100)
139 sbuf.append('0');
140 if (millis < 10)
141 sbuf.append('0');
142
143 sbuf.append(millis);
144 return sbuf;
145 }
146
147
148
149
150 public
151 Date parse(java.lang.String s, ParsePosition pos) {
152 return null;
153 }
154 }
155