01: package com.tagtraum.perf.gcviewer.util;
02:
03: import java.text.DateFormat;
04: import java.text.FieldPosition;
05: import java.text.ParsePosition;
06: import java.text.SimpleDateFormat;
07: import java.util.Date;
08: import java.util.TimeZone;
09:
10: /**
11: * TimeStampFormatter.
12: * <p/>
13: * Date: Sep 17, 2005
14: * Time: 1:01:13 PM
15: *
16: * @author <a href="mailto:hs@tagtraum.com">Hendrik Schreiber</a>
17: */
18: public class TimeFormat extends DateFormat {
19:
20: private static final long ONE_SECOND = 1000l;
21: private static final long ONE_MINUTE = ONE_SECOND * 60l;
22: private static final long ONE_HOUR = ONE_MINUTE * 60l;
23: private static final long ONE_DAY = ONE_HOUR * 24l;
24:
25: private SimpleDateFormat secondsFormat = new SimpleDateFormat(
26: "s's'");
27: private SimpleDateFormat minuteFormat = new SimpleDateFormat("m'm'");
28: private SimpleDateFormat hourFormat = new SimpleDateFormat("H'h'");
29: private DateFormat fullFormat = DateFormat.getDateTimeInstance(
30: DateFormat.SHORT, DateFormat.MEDIUM);
31:
32: public TimeFormat() {
33: final TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
34: minuteFormat.setTimeZone(utcTimeZone);
35: hourFormat.setTimeZone(utcTimeZone);
36: }
37:
38: public StringBuffer format(Date date, StringBuffer toAppendTo,
39: FieldPosition fieldPosition) {
40: long time = date.getTime();
41: if (time >= ONE_DAY * 365) {
42: return fullFormat.format(date, toAppendTo, fieldPosition);
43: }
44: if (time >= ONE_DAY * 3) {
45: toAppendTo.append(time / ONE_DAY);
46: toAppendTo.append('d');
47: if (time % ONE_DAY != 0) {
48: hourFormat.format(date, toAppendTo, fieldPosition);
49: }
50: } else if (time >= ONE_HOUR) {
51: toAppendTo.append(time / ONE_HOUR);
52: toAppendTo.append('h');
53: }
54:
55: if (time >= ONE_MINUTE && time % ONE_HOUR != 0) {
56: minuteFormat.format(date, toAppendTo, fieldPosition);
57: }
58: if (time >= ONE_SECOND && time % ONE_MINUTE != 0) {
59: secondsFormat.format(date, toAppendTo, fieldPosition);
60: }
61: return toAppendTo;
62: }
63:
64: public Date parse(String source, ParsePosition pos) {
65: throw new RuntimeException("Not implemented.");
66: }
67:
68: }
|