用于处理Unix Time时间的工具类

用于处理Unix Time时间的工具类
import java.util.Calendar;
import java.util.Date;

/**
 * 该类是DateUtil的改进类, 专门用于处理Unix Time时间, 即格式为"yyyy-MM-dd HH:mm:ss". 
 */
public final class UnixTime {

    static ThreadLocal<Calendar> CalendarLocal = new ThreadLocal<Calendar>() {

        @Override
        protected Calendar initialValue() {
            return Calendar.getInstance();
        }

    };

    /**
     * 标记各个字段的起始位置; 
     */
    static interface Index {
        /* yyyy-MM-dd HH:mm:ss */
        int[] YEAR = { 0, 4 };
        int[] MONTH = { 5, 7 };
        int[] DAY = { 8, 10 };
        int[] HOUR = { 11, 13 };
        int[] MINUTE = { 14, 16 };
        int[] SECOND = { 17, 19 };
    }

    /**
     * 解析日期字串, 返回各个时间段的数值. 依次是年, 月, 日, 时, 分, 秒.
     * 
     * @param val
     *            日期字串, 固定格式为"yyyy-MM-dd HH:mm:ss"
     * @return 解析后的各个时间段的数值数组.
     */
    public static int[] extract(String val) {
        int[] vals = new int[6];
        int len = val.length();
        if (len >= Index.YEAR[1]) {
            vals[0] = Integer.parseInt(val.substring(Index.YEAR[0], Index.YEAR[1]), 10);
        }
        if (len >= Index.MONTH[1]) {
            vals[1] = Integer.parseInt(val.substring(Index.MONTH[0], Index.MONTH[1]), 10) - 1;
        }
        if (len >= Index.DAY[1]) {
            vals[2] = Integer.parseInt(val.substring(Index.DAY[0], Index.DAY[1]), 10);
        }
        if (len >= Index.HOUR[1]) {
            vals[3] = Integer.parseInt(val.substring(Index.HOUR[0], Index.HOUR[1]), 10);
        }
        if (len >= Index.MINUTE[1]) {
            vals[4] = Integer.parseInt(val.substring(Index.MINUTE[0], Index.MINUTE[1]), 10);
        }
        if (len >= Index.SECOND[1]) {
            vals[5] = Integer.parseInt(val.substring(Index.SECOND[0], Index.SECOND[1]), 10);
        }
        return vals;
    }

    /**
     * 解析日期对象, 返回各个时间段的数值. 依次是年, 月, 日, 时, 分, 秒.
     * 
     * @param val
     *            日期字串, 固定格式为"yyyy-MM-dd HH:mm:ss"
     * @return 解析后的各个时间段的数值数组.
     */
    public static int[] extract(Date val) {
        int[] vals = new int[6];
        Calendar cal = CalendarLocal.get();
        cal.setTime(val);
        vals[0] = cal.get(Calendar.YEAR);
        vals[1] = cal.get(Calendar.MONTH);
        vals[2] = cal.get(Calendar.DAY_OF_MONTH);
        vals[3] = cal.get(Calendar.HOUR_OF_DAY);
        vals[4] = cal.get(Calendar.MINUTE);
        vals[5] = cal.get(Calendar.SECOND);
        return vals;
    }

    /**
     * 解析日期字串, 返回日期对象.
     * 
     * @param val
     *            日期字串, 固定格式为"yyyy-MM-dd HH:mm:ss"
     * @return
     */
    public static Date parse(String val) {
        int[] vals = extract(val);
        Calendar cal = CalendarLocal.get();
        cal.set(vals[0], vals[1], vals[2], vals[3], vals[4], vals[5]);
        return cal.getTime();
    }

    /**
     * 格式日期对象.
     * 
     * @param date
     * @return
     *            日期字串, 固定格式为"yyyy-MM-dd HH:mm:ss"
     */
    public static String format(Date date) {
        int[] vals = extract(date);
        return String.format("%04d-%02d-%02d %02d:%02d:%02d", vals[0], vals[1] + 1, vals[2], vals[3], vals[4], vals[5]);
    }

    /**
     * 格式日期对象.
     * 
     * @param date
     * @return
     *            日期字串, 固定格式为"yyyy-MM-dd"
     */
    public static String formatDate(Date date) {
        int[] vals = extract(date);
        return String.format("%04d-%02d-%02d", vals[0], vals[1] + 1, vals[2]);
    }

}

 

获取当天日期 获取本周一日期 获取本周日的日期 获取上周一日期:" + tt.getPreviousWeekday("yyyy-MM-dd")); 获取上周日日期:" + tt.getPreviousWeekSunday("yyyy-MM-dd")); 获取上周一日期:" + tt.getWeekday(-1, "yyyy-MM-dd")); 获取上周日日期:" + tt.getWeekSunday(-1, "yyyy-MM-dd")); 获取下周一日期:" + tt.getNextMonday("yyyy-MM-dd")); 获取下周日日期:" + tt.getNextSunday("yyyy-MM-dd")); 获取本月第一天日期:" + tt.getFirstDayOfMonth()); 获取本月最后一天日期:" + tt.getDefaultDay()); 获取上月第一天日期:" + tt.getPreviousMonthFirst("yyyy-MM-dd")); 获取上月最后一天的日期:" + tt.getPreviousMonthEnd("yyyy-MM-dd")); 获取某月第一天日期:" + tt.getMonthFirst(0, "yyyy-MM-dd")); 获取某月最后一天的日期:" + tt.getMonthEnd(0, "yyyy-MM-dd")); 获取下月第一天日期:" + tt.getNextMonthFirst("yyyy-MM-dd")); 获取下月最后一天日期:" + tt.getNextMonthEnd("yyyy-MM-dd")); 获取本年的第一天日期:" + tt.getCurrentYearFirst()); 获取本年最后一天日期:" + tt.getCurrentYearEnd()); 获取去年的第一天日期:" + tt.getPreviousYearFirst()); 获取去年的最后一天日期:" + tt.getPreviousYearEnd()); 获取明年第一天日期:" + tt.getNextYearFirst()); 获取明年最后一天日期:" + tt.getNextYearEnd()); 获取本季度第一天:" + tt.getThisSeasonFirstTime(11)); 获取本季度最后一天:" + tt.getThisSeasonFinallyTime(11)); 获取两个日期之间间隔天数 获取当前月的第几周:" + tt.getWeekOfMonth()); 获取当前年份:" + tt.getYear()); 获取当前月份:" + tt.getMonth()); 获取今天在本年的第几天:" + tt.getDayOfYear()); 获得今天在本月的第几天(获得当前日):" + tt.getDayOfMonth()); 获得今天在本周的第几天:" + tt.getDayOfWeek()); 字符串转时间 获得一个日期所在周的星期几的日期
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值