时间工具类 核心是 日历类 线程不安全版本

核心是借助Calendar类,可以针对每个时间单位(如:年、月、日 ........ 毫秒),进行操作(添加与制定),然后重新获得设置后的时间!

如果想要了解Calendar 可以参考 https://www.zanglikun.com/2551.html#calendar%E7%B1%BB

线程不安全的原因:GregorianCalendar不是因为它继承了非线程安全的字段和方法.

解决方案就是ThreadLocal

public class ThreadSafeCalendar {
    
    private static final ThreadLocal<Calendar> calendar = new ThreadLocal<Calendar>() {
        @Override
        protected Calendar initialValue() {
            return Calendar.getInstance();
        }
    };
    
    public static Date addDays(Date date, int days) {
        Calendar cal = calendar.get();
        cal.setTime(date);
        cal.add(Calendar.DAY_OF_MONTH, days);
        return cal.getTime();
    }
}
import java.util.Calendar;

public class TimeUtils {

    /**
     * 获取昨天的开始其实时间戳
     * @return
     */
    public static Long getYesterdayStartTime() {
        Calendar todayStart = Calendar.getInstance();
        todayStart.set(Calendar.HOUR_OF_DAY, 0);
        todayStart.set(Calendar.MINUTE, 0);
        todayStart.set(Calendar.SECOND, 0);
        todayStart.set(Calendar.MILLISECOND, 0);
        long timeInMillis = todayStart.getTimeInMillis() - 86400000;
        return timeInMillis;
    }

    /**
     * 获取昨天的结束时间戳
     * @return
     */
    public static Long getYesterdayEndTime() {
        Calendar todayEnd = Calendar.getInstance();
        todayEnd.set(Calendar.HOUR_OF_DAY, 23);
        todayEnd.set(Calendar.MINUTE, 59);
        todayEnd.set(Calendar.SECOND, 59);
        todayEnd.set(Calendar.MILLISECOND, 999);
        long timeInMillis = todayEnd.getTimeInMillis() - 86400000;
        return timeInMillis;
    }

    /**
     * 获取今天的起始时间戳
     * @return
     */
    public static Long getTodayStartTime() {
        Calendar todayStart = Calendar.getInstance();
        todayStart.set(Calendar.HOUR_OF_DAY, 0);
        todayStart.set(Calendar.MINUTE, 0);
        todayStart.set(Calendar.SECOND, 0);
        todayStart.set(Calendar.MILLISECOND, 0);
        return todayStart.getTimeInMillis();
    }

    /**
     * 获取今天的结束时间戳
     * @return
     */
    public static Long getTodayEndTime() {
        Calendar todayEnd = Calendar.getInstance();
        todayEnd.set(Calendar.HOUR_OF_DAY, 23);
        todayEnd.set(Calendar.MINUTE, 59);
        todayEnd.set(Calendar.SECOND, 59);
        todayEnd.set(Calendar.MILLISECOND, 999);
        return todayEnd.getTimeInMillis();
    }

    /**
     * 获取上周周一时间戳
     * @return
     */
    public static Long getLastMondayTime() {
        Calendar cal = Calendar.getInstance();
        // 将每周第一天设为星期一,默认是星期天
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.add(Calendar.DATE, -1 * 7);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTimeInMillis();
    }

    /**
     * 获取上周周日时间戳
     * @return
     */
    public static Long getLastSundayTime() {
        Calendar cal = Calendar.getInstance();
        //将每周第一天设为星期一,默认是星期天
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.add(Calendar.DATE, -7);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);

        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);

        return cal.getTimeInMillis();
    }

    /**
     * 获取本月开始时间戳
     * @return String
     * **/
    public static Long getThisMonthStartTime(){
        Calendar cal=Calendar.getInstance();
        cal.add(Calendar.MONTH, 0);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTimeInMillis();
    }

    /**
     * 获取本月最后一天时间戳
     * @return String
     * **/
    public static Long getThisMonthEndDayTime(){
        Calendar cal=Calendar.getInstance();
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTimeInMillis();
    }

    /**
     * 获取本周的第一天时间戳
     * @return String
     * **/
    public static Long getThisWeekStartTime(){
        Calendar cal = Calendar.getInstance();
        // 将每周第一天设为星期一,默认是星期天
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTimeInMillis();
    }

    /**
     * 获取本周的最后一天时间戳
     * @return String
     * **/
    public static Long getThisWeekEndTime(){
        Calendar cal = Calendar.getInstance();
        //将每周第一天设为星期一,默认是星期天
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTimeInMillis();
    }
}
下载
免费下载
  • 包含资源: (1个)
  • 最近更新: 2023-05-26

下载遇到问题?可联系客服或反馈

文章版权声明:除非注明,否则均为八一构原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,57人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码