TimeRange.java :  » Clock » android-timetracker » net » ser1 » timetracker » Android Open Source

Android Open Source » Clock » android timetracker 
android timetracker » net » ser1 » timetracker » TimeRange.java
/**
 * TimeTracker 
 * 2008, 2009 Sean Russell
 * @author Sean Russell <ser@germane-software.com>
 */
package net.ser1.timetracker;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class TimeRange implements Comparable<TimeRange> {
    private long start;
    private long end;
    public static final long NULL = -1;
    
    public TimeRange( long start, long end ) {
        this.start = start;
        this.end = end;
    }
    public long getStart() {
        return start;
    }
    public void setStart(long start) {
        this.start = start;
    }
    public long getEnd() {
        return end;
    }
    public void setEnd(long end) {
        this.end = end;
    }
    public long getTotal() {
        if (end == NULL) return System.currentTimeMillis() - start;
        return end - start;
    }
    
    protected static DateFormat FORMAT = new SimpleDateFormat("HH:mm");
    public String toString() {
        Date s = new Date(start);
        StringBuffer b = new StringBuffer(FORMAT.format(s));
        b.append(" - ");
        if (end != NULL) {
            b.append(FORMAT.format(new Date(end)));
        } else {
            b.append( "..." );
        }
        return b.toString();
    }
    
    public int compareTo(TimeRange another) {
        if (start < another.start) {
            return -1;
        } else if (start > another.start) {
            return 1;
        } else {
            if (end == NULL) return 1;
            if (another.end == NULL) return -1;
            if (end < another.end) {
                return -1;
            } else if (end > another.end) {
                return 1;
            } else {
                return 0;
            }
        }
    }

    @Override
    public boolean equals(Object o) {
        if (o instanceof TimeRange) {
            TimeRange t = (TimeRange)o;
            return t.start == start && t.end == end;
        } else {
            return false;
        }
    }

    @Override
    public int hashCode() {
        return (int)(start + (end * 101));
    }
    
    private static final int[] FIELDS = {
        Calendar.HOUR_OF_DAY,
        Calendar.MINUTE,
        Calendar.SECOND,
        Calendar.MILLISECOND
      };
    
    /**
     * Finds the amount of time from a range that overlaps with a day
     * @param day The day on which the time must overlap to be counted
     * @param start The range start
     * @param end The range end
     * @return The number of milliseconds of the range that overlaps with the 
     * day
     */
    public static long overlap( Calendar day, long start, long end ) {
        for (int x : FIELDS) day.set(x, day.getMinimum(x));
        long ms_start = day.getTime().getTime();
        day.add(Calendar.DAY_OF_MONTH, 1);
        long ms_end = day.getTime().getTime();
        
        if (ms_end < start || end < ms_start) return 0;
        
        long off_start = ms_start > start ? ms_start : start;
        long off_end   = ms_end < end ? ms_end : end;
        long off_diff  = off_end - off_start;
        return off_diff;
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.