1:
42:
43: package ;
44:
45: import ;
46: import ;
47: import ;
48: import ;
49: import ;
50: import ;
51: import ;
52: import ;
53: import ;
54: import ;
55: import ;
56: import ;
57:
58: import ;
59:
60:
64: public class MonthDateFormat extends DateFormat {
65:
66:
67: private String[] months;
68:
69:
70: private boolean[] showYear;
71:
72:
73: private DateFormat yearFormatter;
74:
75:
78: public MonthDateFormat() {
79: this(TimeZone.getDefault());
80: }
81:
82:
87: public MonthDateFormat(TimeZone zone) {
88: this(zone, Locale.getDefault(), 1, true, false);
89: }
90:
91:
97: public MonthDateFormat(Locale locale) {
98: this(TimeZone.getDefault(), locale, 1, true, false);
99: }
100:
101:
110: public MonthDateFormat(TimeZone zone, int chars) {
111: this(zone, Locale.getDefault(), chars, true, false);
112: }
113:
114:
123: public MonthDateFormat(Locale locale, int chars) {
124: this(TimeZone.getDefault(), locale, chars, true, false);
125: }
126:
127:
144: public MonthDateFormat(TimeZone zone, Locale locale, int chars,
145: boolean showYearForJan, boolean showYearForDec) {
146: this(zone, locale, chars, new boolean[] {showYearForJan, false, false,
147: false, false, false, false, false, false, false, false, false,
148: showYearForDec}, new SimpleDateFormat("yy"));
149: }
150:
151:
165: public MonthDateFormat(TimeZone zone, Locale locale, int chars,
166: boolean[] showYear, DateFormat yearFormatter) {
167: if (locale == null) {
168: throw new IllegalArgumentException("Null 'locale' argument.");
169: }
170: DateFormatSymbols dfs = new DateFormatSymbols(locale);
171: String[] monthsFromLocale = dfs.getMonths();
172: this.months = new String[12];
173: for (int i = 0; i < 12; i++) {
174: if (chars > 0) {
175: months[i] = monthsFromLocale[i].substring(0,
176: Math.min(chars, monthsFromLocale[i].length()));
177: }
178: else {
179: months[i] = monthsFromLocale[i];
180: }
181: }
182: this.calendar = new GregorianCalendar(zone);
183: this.showYear = showYear;
184: this.yearFormatter = yearFormatter;
185:
186:
187:
188:
189: this.numberFormat = NumberFormat.getNumberInstance();
190: }
191:
192:
201: public StringBuffer format(Date date, StringBuffer toAppendTo,
202: FieldPosition fieldPosition) {
203: this.calendar.setTime(date);
204: int month = this.calendar.get(Calendar.MONTH);
205: toAppendTo.append(this.months[month]);
206: if (this.showYear[month]) {
207: toAppendTo.append(this.yearFormatter.format(date));
208: }
209: return toAppendTo;
210: }
211:
212:
220: public Date parse(String source, ParsePosition pos) {
221: return null;
222: }
223:
224:
231: public boolean equals(Object obj) {
232: if (obj == this) {
233: return true;
234: }
235: if (!(obj instanceof MonthDateFormat)) {
236: return false;
237: }
238: if (!super.equals(obj)) {
239: return false;
240: }
241: MonthDateFormat that = (MonthDateFormat) obj;
242: if (!Arrays.equals(this.months, that.months)) {
243: return false;
244: }
245: if (!Arrays.equals(this.showYear, that.showYear)) {
246: return false;
247: }
248: if (!this.yearFormatter.equals(that.yearFormatter)) {
249: return false;
250: }
251: return true;
252: }
253:
254:
259: public static void main(String[] args) {
260: MonthDateFormat mdf = new MonthDateFormat(Locale.UK, 2);
261: System.out.println("UK:");
262: System.out.println(mdf.format(new Month(1, 2005).getStart()));
263: System.out.println(mdf.format(new Month(2, 2005).getStart()));
264: System.out.println(mdf.format(new Month(3, 2005).getStart()));
265: System.out.println(mdf.format(new Month(4, 2005).getStart()));
266: System.out.println(mdf.format(new Month(5, 2005).getStart()));
267: System.out.println(mdf.format(new Month(6, 2005).getStart()));
268: System.out.println(mdf.format(new Month(7, 2005).getStart()));
269: System.out.println(mdf.format(new Month(8, 2005).getStart()));
270: System.out.println(mdf.format(new Month(9, 2005).getStart()));
271: System.out.println(mdf.format(new Month(10, 2005).getStart()));
272: System.out.println(mdf.format(new Month(11, 2005).getStart()));
273: System.out.println(mdf.format(new Month(12, 2005).getStart()));
274: System.out.println();
275:
276: mdf = new MonthDateFormat(Locale.GERMANY, 2);
277: System.out.println("GERMANY:");
278: System.out.println(mdf.format(new Month(1, 2005).getStart()));
279: System.out.println(mdf.format(new Month(2, 2005).getStart()));
280: System.out.println(mdf.format(new Month(3, 2005).getStart()));
281: System.out.println(mdf.format(new Month(4, 2005).getStart()));
282: System.out.println(mdf.format(new Month(5, 2005).getStart()));
283: System.out.println(mdf.format(new Month(6, 2005).getStart()));
284: System.out.println(mdf.format(new Month(7, 2005).getStart()));
285: System.out.println(mdf.format(new Month(8, 2005).getStart()));
286: System.out.println(mdf.format(new Month(9, 2005).getStart()));
287: System.out.println(mdf.format(new Month(10, 2005).getStart()));
288: System.out.println(mdf.format(new Month(11, 2005).getStart()));
289: System.out.println(mdf.format(new Month(12, 2005).getStart()));
290: System.out.println();
291:
292: mdf = new MonthDateFormat(Locale.FRANCE, 2);
293: System.out.println("FRANCE:");
294: System.out.println(mdf.format(new Month(1, 2005).getStart()));
295: System.out.println(mdf.format(new Month(2, 2005).getStart()));
296: System.out.println(mdf.format(new Month(3, 2005).getStart()));
297: System.out.println(mdf.format(new Month(4, 2005).getStart()));
298: System.out.println(mdf.format(new Month(5, 2005).getStart()));
299: System.out.println(mdf.format(new Month(6, 2005).getStart()));
300: System.out.println(mdf.format(new Month(7, 2005).getStart()));
301: System.out.println(mdf.format(new Month(8, 2005).getStart()));
302: System.out.println(mdf.format(new Month(9, 2005).getStart()));
303: System.out.println(mdf.format(new Month(10, 2005).getStart()));
304: System.out.println(mdf.format(new Month(11, 2005).getStart()));
305: System.out.println(mdf.format(new Month(12, 2005).getStart()));
306: System.out.println();
307:
308: SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
309: sdf.setNumberFormat(null);
310: System.out.println(sdf.equals("X"));
311: }
312: }