Popular Posts
android.intent.action.SCREEN_ON & android.intent.action.SCREEN_OFF First, I've tried create a receiver to receive screen on/off and register receiver on AndroidManifest.xml like below, but unfortunately ... Multiple line of text limit With Sharepoint Designer, edit the page of list view. Add xsl template as below to override original template. Source template could be foun... Memo: Debounce Task To prevent multi-execution from caller in short time, use debounce for single execution. var debounce = function (func, threshold, execAsap...
Stats
DateTime
package bruce.lib;

import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import java.util.TreeSet;

public class DateTime implements Serializable, Cloneable, Comparable<DateTime> {

    public static DateTime now() {
        return new DateTime();
    }

    public static DateTime fromDate(Date date) {
        DateTime d = new DateTime();
        d.c.setTime(date);
        return d;
    }

    public static DateTime fromTimestamp(long stamp) {
        DateTime d = new DateTime();
        d.c.setTimeInMillis(stamp);
        return d;
    }

    public static DateTime fromCalendar(Calendar c) {
        DateTime d = new DateTime();
        d.c = c;
        return d;
    }

    public static DateTime fromString(String date, String format) throws ParseException {
        DateTime d = new DateTime();
        d.c.setTime(new SimpleDateFormat(format).parse(date));
        return d;
    }

    public static DateTime fromString(String date, String format, Locale locale) throws ParseException {
        DateTime d = new DateTime();
        d.c.setTime(new SimpleDateFormat(format, locale).parse(date));
        return d;
    }

    public static DateTime latest(DateTime... dates) {
        TreeSet<DateTime> set = new TreeSet<DateTime>();
        set.addAll(Arrays.asList(dates));
        return set.last();
    }

    public static DateTime oldest(DateTime... dates) {
        TreeSet<DateTime> set = new TreeSet<DateTime>();
        set.addAll(Arrays.asList(dates));
        return set.first();
    }

    private Calendar c;

    public enum Field {
        ERA, // AD/BC
        YEAR, //
        MONTH, //
        WEEK_OF_YEAR, //
        WEEK_OF_MONTH, //
        AM_PM_MARKER, // AM/PM
        DATE, //
        DAY_OF_MONTH, //
        DAY_OF_WEEK, //
        DAY_OF_WEEK_IN_MONTH, //
        DAY_OF_YEAR, //
        HOUR, //
        MINUTE, //
        SECOND, //
        MILLISECOND, //
        TIMEZONE
    }

    public class Month {
        public static final int JANUARY = 0;
        public static final int FEBRUARY = 1;
        public static final int MARCH = 2;
        public static final int APRIL = 3;
        public static final int MAY = 4;
        public static final int JUNE = 5;
        public static final int JULY = 6;
        public static final int AUGUST = 7;
        public static final int SEPTEMBER = 8;
        public static final int OCTOBER = 9;
        public static final int NOVEMBER = 10;
        public static final int DECEMBER = 11;
        public static final int UNDECIMBER = 12;
    }

    public class Day {
        public static final int SUNDAY = 1;
        public static final int MONDAY = 2;
        public static final int TUESDAY = 3;
        public static final int WEDNESDAY = 4;
        public static final int THURSDAY = 5;
        public static final int FRIDAY = 6;
        public static final int SATURDAY = 7;
    }

    private DateTime() {
        this.c = Calendar.getInstance();
    }

    public boolean after(DateTime datetime) {
        return this.toTimeInMillis() > datetime.toTimeInMillis();
    }

    public boolean before(DateTime datetime) {
        return this.toTimeInMillis() < datetime.toTimeInMillis();
    }

    public DateTime add(Field field, int amount) {
        switch (field) {
        case YEAR:
            this.c.add(Calendar.YEAR, amount);
            return this;
        case MONTH:
            this.c.add(Calendar.MONTH, amount);
            return this;
        case WEEK_OF_YEAR:
        case WEEK_OF_MONTH:
            this.c.add(Calendar.DATE, amount * 7);
            return this;
        case DATE:
        case DAY_OF_MONTH:
        case DAY_OF_WEEK:
        case DAY_OF_WEEK_IN_MONTH:
        case DAY_OF_YEAR:
            this.c.add(Calendar.DATE, amount);
            return this;
        case MINUTE:
            this.c.add(Calendar.MINUTE, amount);
            return this;
        case SECOND:
            this.c.add(Calendar.SECOND, amount);
            return this;
        case HOUR:
            this.c.add(Calendar.HOUR, amount);
            return this;
        case MILLISECOND:
            this.c.add(Calendar.MILLISECOND, amount);
            return this;
        default:
            throw new IllegalArgumentException("Unaccepted field.");
        }
    }

    public DateTime addYear(int amount) {
        return this.add(Field.YEAR, amount);
    }

    public DateTime addMonth(int amount) {
        return this.add(Field.MONTH, amount);
    }

    public DateTime addWeek(int amount) {
        return this.add(Field.WEEK_OF_YEAR, amount);
    }

    public DateTime addDay(int amount) {
        return this.add(Field.DAY_OF_YEAR, amount);
    }

    public DateTime addMinute(int amount) {
        return this.add(Field.MINUTE, amount);
    }

    public DateTime addSecond(int amount) {
        return this.add(Field.SECOND, amount);
    }

    public DateTime addHour(int amount) {
        return this.add(Field.HOUR, amount);
    }

    public DateTime addMilliSecond(int amount) {
        return this.add(Field.MILLISECOND, amount);
    }

    public DateTime set(Field field, int value) {
        switch (field) {
        // case ERA:
        case YEAR:
            this.c.set(Calendar.YEAR, value);
            return this;
        case MONTH:
            this.c.set(Calendar.MONTH, value);
            return this;
            // case WEEK_OF_YEAR:
            // case WEEK_OF_MONTH:
            // case AM_PM_MARKER:
        case DATE:
            this.c.set(Calendar.DATE, value);
            return this;
            // case DAY_OF_MONTH:
            // case DAY_OF_WEEK:
            // case DAY_OF_WEEK_IN_MONTH:
            // case DAY_OF_YEAR:
        case HOUR:
            this.c.set(Calendar.HOUR, value);
            return this;
        case MINUTE:
            this.c.set(Calendar.MINUTE, value);
            return this;
        case SECOND:
            this.c.set(Calendar.SECOND, value);
            return this;
        case MILLISECOND:
            this.c.set(Calendar.MILLISECOND, value);
            return this;
            // case TIMEZONE:
        default:
            throw new IllegalArgumentException("Unaccepted field.");
        }
    }

    public DateTime setYear(int value) {
        return this.set(Field.YEAR, value);
    }

    public DateTime setMonth(int value) {
        return this.set(Field.MONTH, value);
    }

    public DateTime setDate(int value) {
        return this.set(Field.DATE, value);
    }

    public DateTime setHour(int value) {
        return this.set(Field.HOUR, value);
    }

    public DateTime setMinute(int value) {
        return this.set(Field.MINUTE, value);
    }

    public DateTime setSecond(int value) {
        return this.set(Field.SECOND, value);
    }

    public DateTime setMilliSecond(int value) {
        return this.set(Field.MILLISECOND, value);
    }

    public int get(Field field) {
        switch (field) {
        case YEAR:
            return this.c.get(Calendar.YEAR);
        case MONTH:
            return this.c.get(Calendar.MONTH);
        case WEEK_OF_YEAR:
            return this.c.get(Calendar.WEEK_OF_YEAR);
        case WEEK_OF_MONTH:
            return this.c.get(Calendar.WEEK_OF_MONTH);
        case DATE:
            return this.c.get(Calendar.DATE);
        case DAY_OF_MONTH:
            return this.c.get(Calendar.DAY_OF_MONTH);
        case DAY_OF_WEEK:
            return this.c.get(Calendar.DAY_OF_WEEK);
        case DAY_OF_WEEK_IN_MONTH:
            return this.c.get(Calendar.DAY_OF_WEEK_IN_MONTH);
        case DAY_OF_YEAR:
            return this.c.get(Calendar.DAY_OF_YEAR);
        case MINUTE:
            return this.c.get(Calendar.MINUTE);
        case SECOND:
            return this.c.get(Calendar.SECOND);
        case HOUR:
            return this.c.get(Calendar.HOUR);
        case MILLISECOND:
            return this.c.get(Calendar.MILLISECOND);
        default:
            throw new IllegalArgumentException("Unaccepted field.");
        }
    }

    public int getYear() {
        return this.get(Field.YEAR);
    }

    public int getMonth() {
        return this.get(Field.MONTH);
    }

    public int getWeekOfYear() {
        return this.get(Field.WEEK_OF_YEAR);
    }

    public int getWeekOfMonth() {
        return this.get(Field.WEEK_OF_MONTH);
    }

    public int getDate() {
        return this.get(Field.DATE);
    }

    public int getDayOfMonth() {
        return this.get(Field.DAY_OF_MONTH);
    }

    public int getDayOfWeek() {
        return this.get(Field.DAY_OF_WEEK);
    }

    public int getDayOfWeekInMonth() {
        return this.get(Field.DAY_OF_WEEK_IN_MONTH);
    }

    public int getDayOfYear() {
        return this.get(Field.DAY_OF_YEAR);
    }

    public int getHour() {
        return this.get(Field.HOUR);
    }

    public int getMinute() {
        return this.get(Field.MINUTE);
    }

    public int getSecond() {
        return this.get(Field.SECOND);
    }

    public int getMilliSecond() {
        return this.get(Field.MILLISECOND);
    }

    public TimeZone getTimeZone() {
        return this.c.getTimeZone();
    }

    public DateTime setTimeZone(TimeZone zone) {
        this.c.setTimeZone(zone);
        return this;
    }

    public long toTimeInMillis() {
        return this.c.getTimeInMillis();
    }

    public Date toDate() {
        return this.c.getTime();
    }

    public Calendar toCalendar() {
        return this.c;
    }

    @Override
    public String toString() {
        return this.c.getTime().toString();
    }

    public String toString(String format) {
        SimpleDateFormat f = new SimpleDateFormat(format);
        return f.format(this.c.getTime());
    }

    public String toString(String format, Locale locale) {
        SimpleDateFormat f = new SimpleDateFormat(format, locale);
        return f.format(this.c.getTime());
    }

    @Override
    public int hashCode() {
        return c.getTime().hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        DateTime other = (DateTime) obj;
        return this.c.getTimeInMillis() == other.toTimeInMillis();
    }

    @Override
    public int compareTo(DateTime o) {
        return (int) (this.toTimeInMillis() - o.toTimeInMillis());
    }

}