Java tutorial
import java.text.DateFormat; import java.text.FieldPosition; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; /** * TimeStampFormatter. * <p/> * Date: Sep 17, 2005 * Time: 1:01:13 PM * * @author <a href="mailto:hs@tagtraum.com">Hendrik Schreiber</a> */ public class TimeFormat extends DateFormat { private static final long ONE_SECOND = 1000l; private static final long ONE_MINUTE = ONE_SECOND * 60l; private static final long ONE_HOUR = ONE_MINUTE * 60l; private static final long ONE_DAY = ONE_HOUR * 24l; private SimpleDateFormat secondsFormat = new SimpleDateFormat("s's'"); private SimpleDateFormat minuteFormat = new SimpleDateFormat("m'm'"); private SimpleDateFormat hourFormat = new SimpleDateFormat("H'h'"); private DateFormat fullFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM); public TimeFormat() { final TimeZone utcTimeZone = TimeZone.getTimeZone("UTC"); minuteFormat.setTimeZone(utcTimeZone); hourFormat.setTimeZone(utcTimeZone); } public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { long time = date.getTime(); if (time >= ONE_DAY * 365) { return fullFormat.format(date, toAppendTo, fieldPosition); } if (time >= ONE_DAY * 3) { toAppendTo.append(time / ONE_DAY); toAppendTo.append('d'); if (time % ONE_DAY != 0) { hourFormat.format(date, toAppendTo, fieldPosition); } } else if (time >= ONE_HOUR) { toAppendTo.append(time / ONE_HOUR); toAppendTo.append('h'); } if (time >= ONE_MINUTE && time % ONE_HOUR != 0) { minuteFormat.format(date, toAppendTo, fieldPosition); } if (time >= ONE_SECOND && time % ONE_MINUTE != 0) { secondsFormat.format(date, toAppendTo, fieldPosition); } return toAppendTo; } public Date parse(String source, ParsePosition pos) { throw new RuntimeException("Not implemented."); } }