Android 时间工具类

news2024/11/15 21:08:22

最近总结了一下时间相关的用法,如下。

1、日期转换为字符串 默认"yyyy-MM-dd HH:mm:ss"

2、任意类型日期字符串转时间

3、获取当前对应格式的日期

4、获取当前对应格式的日期 默认"yyyyMMddHHmmssSSS"

5、计算该天是星期几

6、获取星期几,java中一周中的数字 转 常规一周中的数字

7、根据日期获取星期

8、获取一个月的开始和结束时间

9、获取一年的开始和结束时间

10、获取季度

11、获取某月 所有日期(yyyy-mm-dd格式字符串)

12、获取一周的开始和结束时间

13、获取某周 所有日期(yyyy-mm-dd格式字符串)

14、 计算两个日期之间相差的秒数

15、计算两个日期之间相差的天数

 
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.Assert;
 
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.time.LocalTime;
import java.util.*;
 
/**
 * 时间工具类
 */
public class DateUtils {
 
 
    private static final String TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
    private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    private static final String DATE_FORMAT = "yyyy-MM-dd";
    private static final String DATE_SIMPLE_FORMAT = "yyyyMMdd";
 
    //====================================时间转换=======================================>>
 
    /**
     * 时长转换
     *
     * @param time 通话时长(秒)
     * @return 几小时几分钟几秒
     */
    public static String getStrTime(Integer time) {
        if (time == null || time == 0) return "";
        StringBuilder str = new StringBuilder();
        int hour = time / 3600;
        if (hour != 0) str.append(hour).append("小时");
        int minutes = (time - hour * 3600) / 60;
        if (minutes != 0) str.append(minutes).append("分钟");
        int seconds = time - hour * 3600 - minutes * 60;
        if (seconds != 0) str.append(seconds).append("秒");
        return str.toString();
    }
 
    public static String millisToStr(long time) {
        if (time <= 0) return "0 秒";
        if (time < 1000) {
            return (time / 1000.0f) + "秒";
        }
        return getStrTime((int) time / 1000);
    }
 
    public static String millisDiff(long time) {
        return millisToStr(System.currentTimeMillis() - time);
    }
 
    /**
     * 日期转换为字符串 默认"yyyy-MM-dd HH:mm:ss"
     *
     * @param date 日期
     */
    public static String dateToStr(Date date) {
        return dateToStr(date, null);
    }
 
    /**
     * 日期转换为字符串
     *
     * @param date   日期
     * @param format 日期格式
     */
    public static String dateToStr(Date date, String format) {
        if (date == null) return null;
        // 如果没有指定字符串转换的格式,则用默认格式进行转换
        if (null == format || "".equals(format) || "Datetime".equals(format)) {
            format = DATETIME_FORMAT;
        } else if ("Timestamp".equals(format)) {
            format = TIMESTAMP_FORMAT;
        } else if ("Date".equals(format)) {
            format = DATE_FORMAT;
        } else if ("DateSimple".equals(format)) {
            format = DATE_SIMPLE_FORMAT;
        } else if ("Simple".equals(format)) {
            format = DATE_SIMPLE_FORMAT;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
    }
 
    /**
     * 任意类型日期字符串转时间
     */
    public static Date strToDate(String time) {
        if (StringUtils.isBlank(time)) return null;
        SimpleDateFormat formatter;
        int tempPos = time.indexOf("AD");
        time = time.trim();
        formatter = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
        if (tempPos > -1) {
            time = time.substring(0, tempPos) +
                    "公元" + time.substring(tempPos + "AD".length());//china
            formatter = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
        }
        if (time.contains(".")) time = time.replaceAll("\\.", "/");
        if (time.contains("-")) time = time.replaceAll("-", "/");
        if (!time.contains("/") && !time.contains(" ")) {
            formatter = new SimpleDateFormat("yyyyMMddHHmmss");
        } else if (time.contains("/")) {
            if (time.contains("am") || time.contains("pm")) formatter = new SimpleDateFormat("yyyy/MM/dd KK:mm:ss a");
            else if (time.contains(" ")) formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            else {
                String[] dateArr = time.split("/");
                if (dateArr.length == 2 || (dateArr.length == 3 && StringUtils.isBlank(dateArr[2])))
                    formatter = new SimpleDateFormat("yyyy/MM");
                else formatter = new SimpleDateFormat("yyyy/MM/dd");
            }
        }
        ParsePosition pos = new ParsePosition(0);
        return formatter.parse(time, pos);
    }
 
    public static Date strToDate(String time, String formatterString) {
        if (StringUtils.isBlank(time) || StringUtils.isBlank(formatterString)) return null;
        SimpleDateFormat formatter = new SimpleDateFormat(formatterString);
        ParsePosition pos = new ParsePosition(0);
        return formatter.parse(time, pos);
    }
 
    public static Date strToDateThrow(String time) {
        if (StringUtils.isBlank(time)) return null;
        Date value = strToDate(time);
        Assert.notNull(value, "无法识别日期格式: " + value);
        return value;
    }
 
    //====================================时间获取=======================================>>
 
    /**
     * 获取当前对应格式的日期
     */
    public static String getDateStr() {
        return getDateStr(null);
    }
 
    /**
     * 获取当前对应格式的日期 默认"yyyyMMddHHmmssSSS"
     *
     * @param format 日期格式
     */
    public static String getDateStr(String format) {
        if (null == format || "".equals(format)) {
            format = "yyyyMMddHHmmssSSS";
        }
        Date date = new Date();
        SimpleDateFormat df = new SimpleDateFormat(format);
        return df.format(date);
    }
 
 
 
    /**
     * 获取星期几,java中一周中的数字 转 常规一周中的数字
     * java中 周日=1 周六=7
     * eg:
     * 周一 -> 1
     * 周日 -> 7
     *
     * @param dayOfWeek java中一周中的数字
     */
    public static int getIsoDayOfWeek(int dayOfWeek) {
        int result;
        if (dayOfWeek == 1) {
            result = 7;
        } else {
            result = dayOfWeek - 1;
        }
        return result;
    }
 
 
    /**
     * 根据日期获取星期
     */
    public static String getWeekOfDate(Date date) {
        String[] weekDays = {"sun", "mon", "tue", "wed", "thu", "fri", "sat"};
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w < 0) w = 0;
        return weekDays[w];
    }
 
    //获取一个月的开始和结束时间
    public static List<Date> getMonthFirstAndEndDay(Date date) {
        List<Date> result = new ArrayList<>();
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
 
        c.set(Calendar.DAY_OF_MONTH, 1);//设置为1号
        result.add(c.getTime());
 
        c.add(Calendar.MONTH, 1);//加一个月
        c.add(Calendar.MILLISECOND, -1);//减一毫秒
        result.add(c.getTime());
 
        return result;
    }
 
    //获取一年的开始和结束时间
    public static List<Date> getYearFirstAndEndDay(Date date) {
        List<Date> result = new ArrayList<>();
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.MONTH, 0);
        c.set(Calendar.DATE, 1);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
 
        result.add(c.getTime());
 
        c.add(Calendar.YEAR, 1);//加一年
        c.add(Calendar.MILLISECOND, -1);//减一毫秒
        result.add(c.getTime());
 
        return result;
    }
 
    public static Date getYearStartTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, 0);
        calendar.add(Calendar.DATE, 0);
        calendar.add(Calendar.MONTH, 0);
        calendar.set(Calendar.DAY_OF_YEAR, 1);
        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 int getQuarter(Date date) {
        int quarter = 0;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int month = c.get(Calendar.MONTH);
        switch (month) {
            case Calendar.JANUARY:
            case Calendar.FEBRUARY:
            case Calendar.MARCH:
                quarter = 1;
                break;
            case Calendar.APRIL:
            case Calendar.MAY:
            case Calendar.JUNE:
                quarter = 2;
                break;
            case Calendar.JULY:
            case Calendar.AUGUST:
            case Calendar.SEPTEMBER:
                quarter = 3;
                break;
            case Calendar.OCTOBER:
            case Calendar.NOVEMBER:
            case Calendar.DECEMBER:
                quarter = 4;
                break;
        }
        return quarter;
    }
 
    /**
     * 获取某月 所有日期(yyyy-mm-dd格式字符串)
     */
    public static List<String> getMonthFullDay(Date date) {
        SimpleDateFormat dateFormatYYYYMMDD = new SimpleDateFormat(DATE_FORMAT);
        List<String> fullDayList = new ArrayList<>();
        // 获得当前日期对象
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        // 当月1号
        c.set(Calendar.DAY_OF_MONTH, 1);
        int count = c.getActualMaximum(Calendar.DAY_OF_MONTH);
        for (int j = 1; j <= count; j++) {
            fullDayList.add(dateFormatYYYYMMDD.format(c.getTime()));
            c.add(Calendar.DAY_OF_MONTH, 1);
        }
        return fullDayList;
    }
 
 
    /**
     * 获取一周的开始和结束时间
     */
    public static List<Date> dateToWeekStartAndEnd(Date date) {
        List<Date> result = new ArrayList<>();
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
 
        c.set(Calendar.DAY_OF_WEEK, 2);//设置为星期1
        result.add(c.getTime());
 
        c.add(Calendar.DAY_OF_WEEK_IN_MONTH, 1);//加一个周
        c.add(Calendar.MILLISECOND, -1);//减一毫秒
        result.add(c.getTime());
 
        return result;
    }
 
    /**
     * 获取某周 所有日期(yyyy-mm-dd格式字符串)
     */
    public static List<String> getWeekFullDay(Date date) {
        SimpleDateFormat dateFormatYYYYMMDD = new SimpleDateFormat(DATE_FORMAT);
        List<String> fullDayList = new ArrayList<>();
        // 获得当前日期对象
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        //周一
        c.set(Calendar.DAY_OF_WEEK, 2);
        int count = c.getActualMaximum(Calendar.DAY_OF_WEEK);
        for (int j = 1; j <= count; j++) {
            fullDayList.add(dateFormatYYYYMMDD.format(c.getTime()));
            c.add(Calendar.DAY_OF_WEEK, 1);
        }
        return fullDayList;
    }
 
    /**
     * 获取当前date的上周的周一
     */
    public static Date getLastWeekMonday(Date date) {
        Date monday = getWeekMonday(date);
        Date lastDate = getLastSec(monday);
        return getWeekMonday(lastDate);
    }
 
    /**
     * 获取当前date的所在周的周一
     */
    public static Date getWeekMonday(Date date) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        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 List<Date> dateToDayStartAndEnd(Date date) {
        List<Date> result = new ArrayList<>();
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        //将时分秒,毫秒域清零
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        result.add(c.getTime());
 
        c.add(Calendar.DAY_OF_YEAR, 1);
        c.add(Calendar.SECOND, -1);
        result.add(c.getTime());
        return result;
    }
 
    /**
     * 获取今天一天的开始时间和结束时间
     */
    public static List<Date> getToday() {
        return dateToDayStartAndEnd(new Date());
    }
 
    /**
     * 获取 时间段内 所有日期(yyyy-mm-dd格式字符串)
     */
    public static List<String> getFullDay(Date startTime, Date endTime) {
        SimpleDateFormat dateFormatYYYYMMDD = new SimpleDateFormat(DATE_FORMAT);
        List<String> fullDayList = new ArrayList<>();
        // 获得当前日期对象
        Calendar s = Calendar.getInstance();
        s.setTime(startTime);
        s.set(Calendar.HOUR_OF_DAY, 0);
        s.set(Calendar.MINUTE, 0);
        s.set(Calendar.SECOND, 0);
        s.set(Calendar.MILLISECOND, 0);
        Calendar e = Calendar.getInstance();
        e.setTime(endTime);
        e.set(Calendar.HOUR_OF_DAY, 0);
        e.set(Calendar.MINUTE, 0);
        e.set(Calendar.SECOND, 0);
        e.set(Calendar.MILLISECOND, 0);
 
        int daysBetween = getDaysBetween(s.getTime(), e.getTime());
        for (int i = 0; i <= daysBetween; i++) {
            fullDayList.add(dateFormatYYYYMMDD.format(s.getTime()));
            s.add(Calendar.DAY_OF_MONTH, 1);
        }
        return fullDayList;
    }
 
    //====================================时间计算=======================================>>
 
    /**
     * 计算两个日期之间相差的秒数
     *
     * @param smdate 较小的时间
     * @param bdate  较大的时间
     * @return 相差秒数
     */
    public static int getSecsBetween(Date smdate, Date bdate) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATETIME_FORMAT);
        try {
            smdate = sdf.parse(sdf.format(smdate));
            bdate = sdf.parse(sdf.format(bdate));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(smdate);
        long time1 = cal.getTimeInMillis();
        cal.setTime(bdate);
        long time2 = cal.getTimeInMillis();
        long between_days = (time2 - time1) / 1000;
 
        return Integer.parseInt(String.valueOf(between_days));
    }
 
    /**
     * 计算两个日期之间相差的天数
     *
     * @param smdate 较小的时间
     * @param bdate  较大的时间
     * @return 相差天数
     */
    public static int getDaysBetween(Date smdate, Date bdate) {
        int second = getSecsBetween(smdate, bdate);
        long between_days = second / 3600 / 24;
 
        return Integer.parseInt(String.valueOf(between_days));
    }
 
    /**
     * 根据日期判断是上午下午还是晚上
     *
     * @return 1:上午 2:下午 3:晚上
     */
    public static Integer getTimeByDate(Date date) {
        if (date == null) return null;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int hour = c.get(Calendar.HOUR_OF_DAY);
        if (hour <= 12) return 1;
        else if (hour <= 18) return 2;
        else return 3;
    }
 
 
    /**
     * 该天是否为月末最后一天
     */
    public static boolean isLastDayOfMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DATE, (calendar.get(Calendar.DATE) + 1));
        return calendar.get(Calendar.DAY_OF_MONTH) == 1;
    }
 
    /**
     * 获取该月有多少天
     */
    public static int getDaysOfMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    }
 
 
    /**
     * 计算得到2个时间的差值,并转成中文
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     */
    public static String getDateDiff(Date startDate, Date endDate) {
        long nd = 1000 * 24 * 60 * 60;
        long nh = 1000 * 60 * 60;
        long nm = 1000 * 60;
        long ns = 1000;
        //long ns = 1000;
        //获得两个时间的毫秒时间差异
        long diff = endDate.getTime() - startDate.getTime();
        //计算差多少天
        long day = diff / nd;
        //计算差多少小时
        long hour = diff % nd / nh;
        //计算差多少分钟
        long min = diff % nd % nh / nm;
        //计算差多少秒//输出结果
        long sec = diff % nd % nh % nm / ns;
        String result = "";
        if (day > 0) result += day + "天";
        if (hour > 0) result += hour + "小时";
        if (min > 0) result += min + "分钟";
        if (result.isEmpty()) result = sec + "秒";
        return result;
    }
 
    /**
     * 计算开始时间和结束时间的差值,转成多少小时
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return eg: 3.21 (小时)
     */
    public static BigDecimal getDateDiffHour(Date startDate, Date endDate) {
        BigDecimal nh = new BigDecimal(1000 * 60 * 60);
        BigDecimal diff = new BigDecimal(endDate.getTime() - startDate.getTime());
        return diff.divide(nh, 2, BigDecimal.ROUND_HALF_UP);
    }
 
    /**
     * 计算开始时间和结束时间的差值,转成多少天
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return eg: 3.21 (天)
     */
    public static BigDecimal getDateDiffDay(Date startDate, Date endDate) {
        BigDecimal nh = new BigDecimal(1000 * 60 * 60 * 24);
        BigDecimal diff = new BigDecimal(endDate.getTime() - startDate.getTime());
        return diff.divide(nh, 2, BigDecimal.ROUND_HALF_UP);
    }
 
 
    //====================================获取时间段=======================================>>
 
    /**
     * 获取这一周的date,从周一到周日
     */
    public static List<Date> dateToWeek(Date mdate) {
        Calendar c = Calendar.getInstance();
        c.setTime(mdate);
        int b = c.get(Calendar.DAY_OF_WEEK) - 1;
 
        Date fdate;
        List<Date> list = new ArrayList<>();
        long fTime = mdate.getTime() - b * 24 * 3600000;
        for (int a = 1; a <= 7; a++) {
            fdate = new Date();
            fdate.setTime(fTime + (a * 24 * 3600000));
            list.add(a - 1, fdate);
        }
        return list;
    }
 
    /**
     * 获取前几天的date
     */
    public static List<Date> getDateListBefore(Date date, Integer num) {
        if (date == null) return null;
        List<Date> result = new ArrayList<>();
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.DATE, -num);
        for (int a = 1; a <= num; a++) {
            c.add(Calendar.DATE, 1);
            Date temp = c.getTime();
            result.add(temp);
        }
        return result;
    }
 
    /**
     * 获取一周、月、年的date
     */
    public static List<Date> getDateListByKind(Date date, String kind) {
        if (date == null || kind == null) return null;
 
        Calendar end = Calendar.getInstance();
 
        Calendar c = Calendar.getInstance();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setTime(date);
        //将时分秒,毫秒域清零
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        switch (kind) {
            case "week":
                c.add(Calendar.DATE, c.getFirstDayOfWeek() - c.get(Calendar.DAY_OF_WEEK));
                end.setTime(c.getTime());
                end.add(Calendar.DATE, 7);
                break;
            case "month":
                c.set(Calendar.DAY_OF_MONTH, 1);
                end.setTime(c.getTime());
                end.add(Calendar.MONTH, 1);
                break;
            case "half":
                c.add(Calendar.MONTH, -6);
                c.set(Calendar.DAY_OF_MONTH, 1);
                end.setTime(date);
                end.set(Calendar.DAY_OF_MONTH, 1);
                end.add(Calendar.MONTH, 1);
                end.add(Calendar.DAY_OF_MONTH, -1);
                break;
            case "year":
                c.set(Calendar.DAY_OF_YEAR, 1);
                end.setTime(c.getTime());
                end.add(Calendar.YEAR, 1);
                break;
            default:
                return null;
        }
 
        boolean setSec = false;
        List<Date> result = new ArrayList<>();
        while (c.before(end)) {
            if (result.size() != 0 && !setSec) {
                //将时分秒,毫秒域清零
                c.set(Calendar.HOUR_OF_DAY, 23);
                c.set(Calendar.MINUTE, 59);
                c.set(Calendar.SECOND, 59);
                c.set(Calendar.MILLISECOND, 999);
                setSec = true;
            }
            result.add(c.getTime());
            c.add(Calendar.DATE, 1);
        }
        return result;
    }
 
    //====================================修改时间=======================================>>
 
    /**
     * 获取前一秒
     */
    public static Date getLastSec(Date date) {
        if (date == null) return null;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.SECOND, -1);
        return c.getTime();
    }
 
    /**
     * 添加秒
     */
    public static Date getWhichSecs(Date date, int secs) {
        if (date == null) return null;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.SECOND, secs);
        return c.getTime();
    }
 
    /**
     * 添加分
     */
    public static Date getWhichMinute(Date date, int minute) {
        if (date == null) return null;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.MINUTE, minute);
        return c.getTime();
    }
 
    /**
     * 获取后一天
     */
    public static Date getNextDate(Date date) {
        return addDay(date, 1);
    }
 
    /**
     * 添加天
     */
    public static Date addDay(Date date, Integer day) {
        if (date == null || day == null) return null;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.DATE, day);
        return c.getTime();
    }
 
    /**
     * 添加月
     */
    public static Date addMonth(Date date, Integer month) {
        if (date == null || month == null) return null;
        if (month == 0) return date;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.MONTH, month);
        return c.getTime();
    }
 
    /**
     * 添加年
     */
    public static Date addYear(Date date, Integer year) {
        if (date == null || year == null) return null;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.YEAR, year);
        return c.getTime();
    }
 
    /**
     * 清除时分秒
     */
    public static Date clearTime(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        //将时分秒,毫秒域清零
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        return c.getTime();
    }
 
    /**
     * 清除秒
     */
    public static Date clearSec(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        return c.getTime();
    }
 
    /**
     * 将时分秒设置成当前时间
     */
    public static Date setTimeToNow(Date date) {
        return setTime(date, new Date());
    }
 
    /**
     * 将时分秒设置成新时间
     */
    public static Date setTime(Date date, Date newDate) {
        if (date == null) return null;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        Calendar now = Calendar.getInstance();
        now.setTime(newDate);
        //将时分秒,毫秒域清零
        c.set(Calendar.HOUR_OF_DAY, now.get(Calendar.HOUR_OF_DAY));
        c.set(Calendar.MINUTE, now.get(Calendar.MINUTE));
        c.set(Calendar.SECOND, now.get(Calendar.SECOND));
        c.set(Calendar.MILLISECOND, now.get(Calendar.MILLISECOND));
        return c.getTime();
    }
 
    /**
     * Timestamp时间戳转date
     *
     * @param timestamp 时间戳
     */
    public static Date timeToDate(Timestamp timestamp) {
        // Timestamp -> String
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = formatter.format(timestamp);
        return DateUtils.strToDate(dateString);
    }
 
    public static boolean isWorkTime() {
        LocalTime now = LocalTime.now();
        return (now.isAfter(LocalTime.of(5, 0)) && now.isBefore(LocalTime.of(18, 0))) ||
                now.isAfter(LocalTime.of(0, 0)) && now.isBefore(LocalTime.of(1, 0));
    }
 
    public static String ehrTimeTransform(String time) {
        if (StringUtils.isBlank(time)) return null;
        String format;
        if (time.length() == 8) {
            format = "yyyyMMdd";
        } else if (time.length() == 14) {
            format = "yyyyMMddHHmmss";
        } else {
            format = "yyyy-MM-dd HH:mm:ss";
        }
        return DateUtils.dateToStr(DateUtils.strToDate(time, format), "yyyy-MM-dd HH:mm:ss");
    }
 
 
    public static void awaitFreeTime() {
        while (isWorkTime()) {
            try {
                Thread.sleep(600000);
            } catch (InterruptedException e) {
                throw new IllegalArgumentException("任务等待失败");
            }
        }
        System.out.println("等待结束");
    }
 
}

点点关注:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

XSS - 进阶篇(蓝莲花的基本使用)

数据来源 本文仅用于信息安全的学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 xss漏洞接收平台-蓝莲花&#xff1a; 1&#xff09;下载并安装Phpstudy&#xff08;安…

分享157个ASP源码,总有一款适合您

ASP源码 分享157个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 157个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1_IF9pFQX4NM-kmJyIAGBQQ?pwdcb55 提取码&#x…

RBAC简介

RBAC BAC基于角色的访问控制&#xff0c;RBAC认为权限授权的过程可以抽象地概括为&#xff1a;Who是否可以对What进行How的访问操作 RBAC简介 基于角色的权限访问控制模型 在RBAC模型里面&#xff0c;有3个基础组成部分&#xff0c;分别是&#xff1a;用户、角色和权限。RB…

微信公众号小程序怎么做?

​微信公众号小程序在当下已经成为人们日常生活中不可或缺的工具&#xff0c;在用户体验方面也做得很好&#xff0c;不仅可以实现沟通和交流&#xff0c;还可以通过微信公众号进行在线预约服务。那么关于微信公众号小程序怎么做&#xff0c;下面就给大家说说。 1、注册微信公众…

Cadence PCB仿真 使用 Allegro PCB SI 元器件端口设置的PDN分析功能介绍图文教程

🏡《总目录》   🏡《分目录》 目录 1,概述2,启动方法3,功能介绍3.1,元器件设置列表(Device)3.2,端口设置列表(Ports)4,总结1,概述 在进行PDN分析时需要对电源网络涉及到的所有元器件的指定端口的参数进行配置。本文介绍PDN网络元器件端口设置的功能。 2,启动…

【寒假day3】leetcode刷题

&#x1f308;一、选择题 ❤第1题&#xff1a;关于重载函数,&#xff08; &#xff09;说明是正确的。 A: 函数名相同&#xff0c;参数类型或个数不同 B: 函数名相同&#xff0c;返回值类型不同 C: 函数名相同&#xff0c;函数内部实现不同 D: 函数名称不同答案&#xff1a…

数据挖掘-特征选择方法:方差过滤,相关性过滤

目录特征选择1、Filter过滤法方差过滤1&#xff0c;消除方差为0的特征2&#xff0c;只留下一半的特征3&#xff0c;特征是二分类时2、相关性过滤法2.1 卡方过滤2.2 F检验2.3 互信息法3、 Embedded嵌入法4、Wrapper包装法5、总结特征选择 数据预处理完成后&#xff0c;就进入特…

常见网络报文数据包格式

当我们应用程序用TCP传输数据的时候&#xff0c;数据被送入协议栈中&#xff0c;然后逐个通过每一层&#xff0c;知道最后到物理层数据转换成比特流&#xff0c;送入网络。而再这个过程中&#xff0c;每一层都会对要发送的数据加一些首部信息。整个过程如下图。以太网帧格式以太…

Mybatis框架(二)再遇Mybatis之Mybatis配置文件与映射文件

本文是本人专栏【Java开发后端系列框架】里的文章&#xff0c;文章根据各框架官网与网上资料加上本人工作经验&#xff0c;进行修改总结发布在这个专栏&#xff0c;主要目的是用于自我提升&#xff0c;不用于获取利益。如果系列文章能到帮到您本人将感到荣幸&#xff0c;如果有…

2023年3月5日DAMA-CDGA/CDGP数据治理认证考试报名入口

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

【每日阅读】前端进阶知识点(一)

如何更改网页中语言属性值 声明当前语言类 html标签更改属性值 lang属性中不区分大小写 en-us en-US 一致 具体可使用 window,document.querySelector(“html”)?.setAttribute(“lang”,newValue); qs库 qs是一个流行的查询参数序列化和解析库。可以将一个普通的object序列…

OpenPPL PPQ量化(2):离线静态量化源码剖析

目录 模型支持 量化onnx原生模型&#xff1a;quantize_onnx_model 输入输出 执行流程 ONNX格式解析 后记 模型支持 openppl支持了三种模型&#xff1a;onnx、caffe、pytorch&#xff0c;其中pytorch和caffe是通过quantize_torch_model和quantize_caffe_model&#xff0c…

Elasticsearch:Terms set 查询

什么是 terms set 查询&#xff1f; Terms set 查询根据匹配给定字段的精确术语的最少数量返回文档。 terms set 查询与 term 查询有何不同&#xff1f; Terms set query 和 Terms query 之间的唯一区别是你可以提供必须匹配的最少数量的术语才能检索特定文档。 什么是 minim…

【Ansys Meshing】Fluent Meshing和Ansys Meshing在划分边界层网格能力上的对比

一、几何模型展示 如下图所示&#xff0c;一端的圆柱是流体入口&#xff0c;另一端的圆柱是流体出口&#xff0c;中间都是导热管。 二、在spaceclaim中进行切割实体 2.1 切割手段 切割平面的位置如图两根线所示&#xff0c;最终得到左右两边两个有圆柱的大块&#xff0c;以…

【SAP Abap】X档案:SAP 快速提供基础数据给第三方系统访问的几种方法(附常用基础数据)

SAP 快速提供基础数据给第三方系统访问的几种方法1、数据封装2、开放RFC访问3、开放接口服务4、开放DB访问5、常用基础数据1、数据封装 在企业信息系统建设过程中&#xff0c;少不了的就是系统集成数据对接。 尤其是SAP系统中大量的基础数据集成&#xff0c;如各种字段值域&am…

C语言:操作符详解

往期文章 C语言&#xff1a;初识C语言C语言&#xff1a;分支语句和循环语句C语言&#xff1a;函数C语言&#xff1a;数组 目录往期文章前言1. 操作符分类2. 算术操作符3. 移位操作符4. 位操作符5. 赋值操作符6. 符合赋值符7. 单目操作符8. 关系操作符9. 逻辑操作符10. 条件操作…

Java 中的基本设计模式

设计模式是针对常见软件设计问题的可重用解决方案。它们提供了一种以一致且高效的方式组织和构建代码的方法。一些常见的设计模式包括&#xff1a;工厂模式是一种创建型设计模式&#xff0c;它提供用于在超类中创建对象的接口&#xff0c;但允许子类更改将要创建的对象的类型。…

【数据结构趣味多】优先级队列——堆

1. 优先级队列 概念&#xff1a; 队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队列时&#xff0c;可能需要优先级高的元素先出队列&#xff0c;该中场景下&#xff0c;使用队列显然不合适&#xff0c;比…

前端打包后生成的dist 或 build目录,如何在本地启动服务运行

前端打包后生成的dist/build目录&#xff0c;如何在本地启动服务运行 运行npn run build&#xff0c;会打包后会产生 dist 或 build 目录 一般情况下&#xff0c;直接打开dist 或 build 目录下的 index.html会在浏览器看到内容。 然而发现网页一片空白&#xff0c;打开了控制台…

C++基础入门(引用补充)

1、使用场景做参数void Swap(int& left, int& right) {int temp left;left right;right temp; }做返回值int& Count() {static int n 0;n;// ...return n; }c语言内&#xff0c;出了count函数&#xff0c;n被销毁&#xff0c;会创建临时变量存储其值&#xff0…