package tim.prune.data; import java.text.DateFormat; import java.util.Calendar; import java.util.TimeZone; /** * Class to hold a timestamp based on a local timezone, for example * from a camera or audio recorder. * When the selected timezone changes, this timestamp will keep its * date and time but the numerical value will change accordingly. */ public class TimestampLocal extends Timestamp { private boolean _valid = false; private int _year=0, _month=0, _day=0; private int _hour=0, _minute=0, _second=0; /** * Constructor giving each field value individually * @param inYear year * @param inMonth month, beginning with 1 * @param inDay day of month, beginning with 1 * @param inHour hour of day, 0-24 * @param inMinute minute * @param inSecond seconds */ public TimestampLocal(int inYear, int inMonth, int inDay, int inHour, int inMinute, int inSecond) { _valid = inYear > 0 && inYear < 3000 && inMonth > 0 && inMonth < 13 && inDay > 0 && inDay < 32 && inHour >= 0 && inHour < 24 && inMinute >= 0 && inMinute < 60 && inSecond >= 0 && inSecond < 60; if (_valid) { _year = inYear; _month = inMonth; _day = inDay; _hour = inHour; _minute = inMinute; _second = inSecond; } } /** @return true if valid */ public boolean isValid() { return _valid; } @Override public Calendar getCalendar(TimeZone inZone) { Calendar cal = Calendar.getInstance(); if (inZone != null) { cal.setTimeZone(inZone); } cal.set(Calendar.YEAR, _year); cal.set(Calendar.MONTH, _month - 1); cal.set(Calendar.DAY_OF_MONTH, _day); cal.set(Calendar.HOUR_OF_DAY, _hour); cal.set(Calendar.MINUTE, _minute); cal.set(Calendar.SECOND, _second); cal.set(Calendar.MILLISECOND, 0); return cal; } @Override public long getMilliseconds(TimeZone inZone) { return getCalendar(inZone).getTimeInMillis(); } @Override public void addOffsetSeconds(long inOffset) { System.err.println("Local timestamps don't support offsets."); } @Override protected boolean hasMilliseconds() { return false; } /** * Utility method for formatting dates / times * @param inFormat formatter object * @param inTimezone timezone to use * @return formatted String */ @Override protected String format(DateFormat inFormat, TimeZone inTimezone) { Calendar cal = getCalendar(inTimezone); inFormat.setTimeZone(inTimezone); return inFormat.format(cal.getTime()); } }