Java 日期工具類

jopen 10年前發布 | 15K 次閱讀 工具類 Java開發

public class CalendarUtil
{
    private static Calendar calendar = null;

/**
 * 根據類型抓取時間段
 * @param type <dt> <dl>1:最近一個小時</dl> <dl>2:最近一天</dl> <dl>3:最近一周</dl>
 * <dl>4:最近一月</dl> <dl>5:最近一季度</dl> <dl>6:最近半年</dl> <dl>7:最近一年</dl>
 * <dl>8:昨天</dl><dl>9:上周</dl> <dl>10:上月</dl> <dl>11:上季度</dl> <dl>12:上半年</dl>
 * <dl>13:去年</dl> <dt>
 * @return
 */
public static Date[] getTime(int type)
{
    switch (type)
    {
        case 1:
            return calcThePastHour();
        case 2:
            return calcRecentDay();
        case 3:
            return calcTheLatestWeek();
        case 4:
            return calcRecentMonth();
        case 5:
            return calcMostRecentQuarter();
        case 6:
            return calcRecentHalfYear();
        case 7:
            return null;
        case 8:
            return calcYesterday();
        case 9:
            return calcLastWeek();
        case 10:
            return calcLastMonth();
        case 11:
            return calcLastSeason();
        case 12:
            return calcFirstHalfYear();
        case 13:
            return calcPastYear();
        default:
            throw new IllegalArgumentException("type 只能在[1,13]之間");
    }
}

/**
 * 昨天時間段
 */
public static Date[] calcYesterday()
{
    calendar = Calendar.getInstance();
    calendar.add(Calendar.DATE, -1);
    Date from = getMinDate(calendar);
    Date to = getMaxDate(calendar);
    return new Date[]{from, to};
}

/**
 * 國內習慣 上一周時間段
 */
public static Date[] calcLastWeek()
{
    calendar = Calendar.getInstance();
    int minus = calendar.get(Calendar.DAY_OF_WEEK);
    calendar.add(Calendar.DATE, -minus + 1);
    Date to = getMaxDate(calendar);
    calendar.add(Calendar.DATE, -6);
    Date from = getMinDate(calendar);
    return new Date[]{from, to};
}

/**
 * 國外習慣 上一周時間段
 */
public static Date[] calcLastWeekF()
{
    calendar = Calendar.getInstance();
    int minus = calendar.get(Calendar.DAY_OF_WEEK);
    calendar.add(Calendar.DATE, -minus);
    Date to = getMaxDate(calendar);
    calendar.add(Calendar.DATE, -6);
    Date from = getMinDate(calendar);
    return new Date[]{from, to};
}

/**
 * 上個月時間段
 */
public static Date[] calcLastMonth()
{
    calendar = Calendar.getInstance();
    calendar.set(Calendar.DAY_OF_MONTH, 0);
    Date to = getMaxDate(calendar);
    calendar.set(Calendar.DAY_OF_MONTH, 1);
    Date from = getMinDate(calendar);
    return new Date[]{from, to};
}

/**
 * 上半年時間段
 */
public static Date[] calcFirstHalfYear()
{
    calendar = Calendar.getInstance();
    int year = calendar.get(Calendar.YEAR);
    calendar.set(year, 0, 1);
    Date from = getMinDate(calendar);
    calendar.set(year, 5, 30);
    Date to = getMaxDate(calendar);
    return new Date[]{from, to};

}

/**
 * 下半年時間段
 */
public static Date[] calcNextHalfYear()
{
    calendar = Calendar.getInstance();
    int year = calendar.get(Calendar.YEAR);
    calendar.set(year, 6, 1);
    Date from = getMinDate(calendar);
    calendar.set(year, 11, 31);
    Date to = getMaxDate(calendar);
    return new Date[]{from, to};
}

/**
 * 去年時間段
 */
public static Date[] calcPastYear()
{
    calendar = Calendar.getInstance();
    int pastYear = calendar.get(Calendar.YEAR) - 1;
    calendar.set(pastYear, 0, 1);
    Date from = getMinDate(calendar);
    calendar.set(pastYear, 11, 31);
    Date to = getMaxDate(calendar);
    return new Date[]{from, to};
}

/**
 * 上一季度時間段
 */
public static Date[] calcLastSeason()
{
    calendar = Calendar.getInstance();
    Date[] time = new Date[2];
    Calendar c = Calendar.getInstance();
    int lastSeason = getSeason(calendar) - 1;
    if (lastSeason == 1)
    {//第一季度  
        c.set(Calendar.MONTH, Calendar.JANUARY);
        time[0] = getMinMonthDate(c);
        c.set(Calendar.MONTH, Calendar.MARCH);
        time[1] = getMaxMonthDate(c);
    }
    else if (lastSeason == 2)
    {//第二季度  
        c.set(Calendar.MONTH, Calendar.APRIL);
        time[0] = getMinMonthDate(c);
        c.set(Calendar.MONTH, Calendar.JUNE);
        time[1] = getMaxMonthDate(c);
    }
    else if (lastSeason == 3)
    {//第三季度  
        c.set(Calendar.MONTH, Calendar.JULY);
        time[0] = getMinMonthDate(c);
        c.set(Calendar.MONTH, Calendar.SEPTEMBER);
        time[1] = getMaxMonthDate(c);
    }
    else if (lastSeason == 0)
    {//去年的第四季度  
        c.set(Calendar.MONTH, Calendar.OCTOBER);
        time[0] = getMinMonthDate(c);
        c.set(Calendar.MONTH, Calendar.DECEMBER);
        time[1] = getMaxMonthDate(c);
    }
    return time;
}

/**
 * 最近一小時時間段
 */
public static Date[] calcThePastHour()
{
    calendar = Calendar.getInstance();
    Date to = calendar.getTime();
    calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1);
    Date from = calendar.getTime();
    return new Date[]{from, to};
}

/**
 * 最近一天時間段
 */
public static Date[] calcRecentDay()
{
    calendar = Calendar.getInstance();
    Date to = calendar.getTime();
    calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 1);
    Date from = calendar.getTime();
    return new Date[]{from, to};
}

/**
 * 最近一周時間段
 */
public static Date[] calcTheLatestWeek()
{
    calendar = Calendar.getInstance();
    Date to = calendar.getTime();
    calendar.set(Calendar.WEEK_OF_MONTH, calendar.get(Calendar.WEEK_OF_MONTH) - 1);
    Date from = calendar.getTime();
    return new Date[]{from, to};
}

/**
 * 最近一個月
 */
public static Date[] calcRecentMonth()
{
    calendar = Calendar.getInstance();
    Date to = calendar.getTime();
    calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);
    Date from = calendar.getTime();
    return new Date[]{from, to};
}

/**
 * 最近一個季度
 */
public static Date[] calcMostRecentQuarter()
{
    calendar = Calendar.getInstance();
    Date to = calendar.getTime();
    calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 3);
    Date from = calendar.getTime();
    return new Date[]{from, to};
}

/**
 * 最近半年
 */
public static Date[] calcRecentHalfYear()
{
    calendar = Calendar.getInstance();
    Date to = calendar.getTime();
    calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 6);
    Date from = calendar.getTime();
    return new Date[]{from, to};

}

/**
 * 最近一年
 */
public static Date[] calcRecentYear()
{
    calendar = Calendar.getInstance();
    Date to = calendar.getTime();
    calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 1);
    Date from = calendar.getTime();
    return new Date[]{from, to};
}

/**
 * 抓取季度序列號
 * @param calendar
 * @return
 */
public static int getSeason(Calendar calendar)
{

    int season = 0;
    int month = calendar.get(Calendar.MONTH);
    switch (month)
    {
        case Calendar.JANUARY:
        case Calendar.FEBRUARY:
        case Calendar.MARCH:
            season = 1;
            break;
        case Calendar.APRIL:
        case Calendar.MAY:
        case Calendar.JUNE:
            season = 2;
            break;
        case Calendar.JULY:
        case Calendar.AUGUST:
        case Calendar.SEPTEMBER:
            season = 3;
            break;
        case Calendar.OCTOBER:
        case Calendar.NOVEMBER:
        case Calendar.DECEMBER:
            season = 4;
            break;
        default:
            break;
    }
    return season;
}

/**
 * 獲取當天最小時間
 */
public static Date getMinDate(Calendar calendar)
{
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    return calendar.getTime();
}

/**
 * 獲取當天最大時間
 */
public static Date getMaxDate(Calendar calendar)
{
    calendar.set(Calendar.HOUR_OF_DAY, 23);
    calendar.set(Calendar.MINUTE, 59);
    calendar.set(Calendar.SECOND, 59);
    calendar.set(Calendar.MILLISECOND, 0);
    return calendar.getTime();
}

/**
 * 獲取一個月中第一天
 */
public static Date getMinMonthDate(Calendar c)
{
    c.set(Calendar.DAY_OF_MONTH, 1);
    return getMinDate(c);
}

/**
 * 獲取一個月的最后一天
 */
public static Date getMaxMonthDate(Calendar c)
{
    c.add(Calendar.MONTH, 1);
    c.set(Calendar.DAY_OF_MONTH, 0);
    return getMaxDate(c);
}

}</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!