java常用时间工具类

/**
 * LocalDateTime工具类
 *
 * @author Code13
 * @date 2019-11-10 21:10
 */
public final class LocalDateTimeUtil {


    /**
     * @param beginTime 开始时间
     * @param endTime   结束时间
     * @return true在时间段内,false不在时间段内
     */
    public static boolean isBetween(LocalDateTime beginTime, LocalDateTime endTime) {
        LocalDateTime now = LocalDateTime.now();
        boolean flag = false;
        if (now.isAfter(beginTime) && now.isBefore(endTime)) {
            flag = true;
        }
        return flag;
    }

    //获取当前时间的LocalDateTime对象
    //LocalDateTime.now();

    //根据年月日构建LocalDateTime
    //LocalDateTime.of();

    //比较日期先后
    //LocalDateTime.now().isBefore(),
    //LocalDateTime.now().isAfter(),

    /**
     * Date转换为LocalDateTime
     *
     * @param date Date
     * @return java.time.LocalDateTime
     */
    public static LocalDateTime convertDateToLDT(Date date) {
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
    }

    /**
     * LocalDateTime转换为Date
     *
     * @param time LocalDateTime
     * @return java.util.Date
     */
    public static Date convertLDTToDate(LocalDateTime time) {
        return Date.from(time.atZone(ZoneId.systemDefault()).toInstant());
    }


    /**
     * 获取指定日期的毫秒
     *
     * @param time LocalDateTime
     * @return java.lang.Long
     */
    public static Long getMilliByTime(LocalDateTime time) {
        return time.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
    }

    /**
     * 获取指定日期的秒
     *
     * @param time LocalDateTime
     * @return java.lang.Long
     */
    public static Long getSecondsByTime(LocalDateTime time) {
        return time.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
    }

    /**
     * 获取指定时间的指定格式
     *
     * @param time    LocalDateTime
     * @param pattern 字符串格式
     * @return java.lang.String
     */
    public static String formatTime(LocalDateTime time, String pattern) {
        return time.format(DateTimeFormatter.ofPattern(pattern));
    }

    /**
     * 获取指定日期的指定格式
     *
     * @param date    LocalDate
     * @param pattern 字符串格式
     * @return java.lang.String
     */
    public static String formatDate(LocalDate date, String pattern) {
        return date.format(DateTimeFormatter.ofPattern(pattern));
    }

    /**
     * 获取"yyyy-MM-dd hh:mm:ss"格式的当前日期
     *
     * @return {@link String}
     */
    public static String formatNow() {
        return formatTime(LocalDateTime.now(), DatePattern.NORM_DATETIME_PATTERN);
    }

    /**
     * 获取当前时间的指定格式
     *
     * @param pattern 格式
     * @return java.lang.String
     */
    public static String formatNow(String pattern) {
        return formatTime(LocalDateTime.now(), pattern);
    }

    /**
     * 日期加上一个数,根据field不同加不同值,field为ChronoUnit.*
     *
     * @param time   LocalDateTime
     * @param number 值
     * @param field  TemporalUnit
     * @return java.time.LocalDateTime
     */
    public static LocalDateTime plus(LocalDateTime time, long number, TemporalUnit field) {
        return time.plus(number, field);
    }

    /**
     * 日期减去一个数,根据field不同减不同值,field参数为ChronoUnit.*
     *
     * @param time   LocalDateTime
     * @param number 值
     * @param field  TemporalUnit
     * @return java.time.LocalDateTime
     */
    public static LocalDateTime minu(LocalDateTime time, long number, TemporalUnit field) {
        return time.minus(number, field);
    }

    /**
     * 获取两个日期的差  field参数为ChronoUnit.*
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param field     单位(年月日时分秒)
     */
    public static long betweenTwoTime(LocalDateTime startTime, LocalDateTime endTime, ChronoUnit field) {
        Period period = Period.between(LocalDate.from(startTime), LocalDate.from(endTime));
        if (field == ChronoUnit.YEARS) {
            return period.getYears();
        }
        if (field == ChronoUnit.MONTHS) {
            return period.getYears() * 12 + period.getMonths();
        }
        return field.between(startTime, endTime);
    }

    /**
     * 获取一天的开始时间,2017,7,22 00:00
     *
     * @param time LocalDateTime
     * @return java.time.LocalDateTime
     */
    public static LocalDateTime getDayStart(LocalDateTime time) {
        return time.withHour(0)
            .withMinute(0)
            .withSecond(0)
            .withNano(0);
    }

    /**
     * 获取一天的结束时间,2017,7,22 23:59:59.999999999
     *
     * @param time LocalDateTime
     * @return java.time.LocalDateTime
     */
    public static LocalDateTime getDayEnd(LocalDateTime time) {
        return time.withHour(23)
            .withMinute(59)
            .withSecond(59)
            .withNano(999999999);
    }

    /**
     * 将集合中的LocalDateTime格式化
     *
     * @param localDateList 列表
     * @param pattern       格式
     * @return java.util.List<java.lang.String>
     */
    public static List<String> formatDateList(List<LocalDate> localDateList, String pattern) {

        return localDateList.parallelStream()
            .map(localDate -> formatDate(localDate, pattern))
            .collect(Collectors.toList());
    }

    /**
     * 获取从给定的date起指定天数前的LocalDate列表
     * 并按照时间正序排列
     *
     * @param date  date
     * @param range 指定天数范围
     * @return java.util.List<java.time.LocalDate>
     */
    public static List<LocalDate> getDayList(LocalDate date, int range) {
        List<LocalDate> localDateList = Lists.newArrayList();

        for (int i = 0; i < range; i++) {
            LocalDate temp = date.minusDays(i);
            localDateList.add(temp);
        }

        Collections.reverse(localDateList);

        return localDateList;
    }

    /**
     * 从时间戳获取当前时间
     *
     * @param timestamp 时间戳
     * @return java.time.LocalDateTime
     */
    public static LocalDateTime getDateTimeFromTimestamp(long timestamp) {
        Instant instant = Instant.ofEpochMilli(timestamp);
        ZoneId zone = ZoneId.systemDefault();
        return LocalDateTime.ofInstant(instant, zone);
    }

    /**
     * 从时间戳获取当前时间
     *
     * @param timestamp 时间戳
     * @return java.time.LocalDate
     */
    public static LocalDate getDateFromTimestamp(long timestamp) {
        LocalDateTime date = getDateTimeFromTimestamp(timestamp);
        return date.toLocalDate();
    }

    public static LocalDateTime StringToLocalDateTime(String str) {

        LocalDateTime localDateTime =
            LocalDateTime.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        return localDateTime;
    }

    public static LocalTime StringToLocalTime(String str) {

        LocalTime localTime =
            LocalTime.parse(str, DateTimeFormatter.ofPattern("HH:mm:ss"));
        return localTime;
    }

    public static LocalDate StringToLocalDate(String str) {

        LocalDate localDate =
            LocalDate.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        return localDate;
    }


    //比较两个日期相差几天
    public static int daydiff(Date fDate, Date oDate) {

        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(fDate);

        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(oDate);
        int day1 = cal1.get(Calendar.DAY_OF_YEAR);
        int day2 = cal2.get(Calendar.DAY_OF_YEAR);

        int year1 = cal1.get(Calendar.YEAR);
        int year2 = cal2.get(Calendar.YEAR);
        if (year1 != year2)   //不同一年
        {
            int timeDistance = 0;
            for (int i = year1; i < year2; i++) {
                if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)    //闰年
                {
                    timeDistance += 366;
                } else    //不是闰年
                {
                    timeDistance += 365;
                }
            }

            return timeDistance + (day2 - day1);
        } else    //同一年
        {
            return day2 - day1;
        }

    }

    /*
     * 将时间转换为时间戳
     */
    public static String localDateToStamp(String s) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        String res = "";
        if (!"".equals(s)) {
            try {
                res = String.valueOf(sdf.parse(s).getTime() / 1000);
            } catch (Exception e) {
                System.out.println("传入了null值");
            }
        } else {
            long time = System.currentTimeMillis();
            res = String.valueOf(time / 1000);
        }

        return res;
    }

    /*
     * 将时间转换为时间戳
     */
    public static String localDatetimeToStamp(String s) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String res = "";
        if (!"".equals(s)) {
            try {
                res = String.valueOf(sdf.parse(s).getTime() / 1000);
            } catch (Exception e) {
                System.out.println("传入了null值");
            }
        } else {
            long time = System.currentTimeMillis();
            res = String.valueOf(time / 1000);
        }

        return res;
    }


    //4.LocalDate转时间戳
//
    public static String localDateToStamp(LocalDate localDate) {
        long timestamp = localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
        return Long.toString(timestamp);
    }


    //5.LocalDateTime转时间戳
    public static String localDateTimeToStamp(LocalDateTime localDateTime) {
        long timestamp = localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();

        return Long.toString(timestamp);
    }


    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        int daydiff = daydiff(null, new Date());
        System.err.println(daydiff);
    }

    //将数字转为中文
    public static String ToCH(int intInput) {
        String si = String.valueOf(intInput);
        String sd = "";
        if (si.length() == 1) // 個
        {
            sd += GetCH(intInput);
            return sd;
        } else if (si.length() == 2)// 十
        {
            if (si.substring(0, 1).equals("1"))
                sd += "十";
            else
                sd += (GetCH(intInput / 10) + "十");
            sd += ToCH(intInput % 10);
        } else if (si.length() == 3)// 百
        {
            sd += (GetCH(intInput / 100) + "百");
            if (String.valueOf(intInput % 100).length() < 2)
                sd += "零";
            sd += ToCH(intInput % 100);
        } else if (si.length() == 4)// 千
        {
            sd += (GetCH(intInput / 1000) + "千");
            if (String.valueOf(intInput % 1000).length() < 3)
                sd += "零";
            sd += ToCH(intInput % 1000);
        } else if (si.length() == 5)// 萬
        {
            sd += (GetCH(intInput / 10000) + "萬");
            if (String.valueOf(intInput % 10000).length() < 4)
                sd += "零";
            sd += ToCH(intInput % 10000);
        }

        return sd;
    }


    private static String GetCH(int input) {
        String sd = "";
        switch (input) {
            case 1:
                sd = "一";
                break;
            case 2:
                sd = "二";
                break;
            case 3:
                sd = "三";
                break;
            case 4:
                sd = "四";
                break;
            case 5:
                sd = "五";
                break;
            case 6:
                sd = "六";
                break;
            case 7:
                sd = "七";
                break;
            case 8:
                sd = "八";
                break;
            case 9:
                sd = "九";
                break;
            default:
                break;
        }
        return sd;
    }

    /**
     * 获取当前日期前num天的日期
     */
    public static String getNumDayAgo(Integer num) {
        try {
            Calendar now = Calendar.getInstance();
            now.add(Calendar.DAY_OF_MONTH, -num);
            String endDate = new SimpleDateFormat("yyyy-MM-dd").format(now.getTime());
            return endDate;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获得上周第一天 周日 00:00:00
     */
    public static Date getWeekStartDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_WEEK, 1);
        calendar.add(Calendar.DATE, -7);
        return DateUtil.beginOfDay(calendar.getTime());
    }

    /**
     * 获得上周最后一天 周六 23:59:59
     */
    public static Date getWeekEndDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(getWeekStartDay());
        calendar.add(Calendar.DATE, 6);
        return DateUtil.endOfDay(calendar.getTime());
    }

    /**
     * 获得本周第一天 周日 00:00:00
     */
    public static Date getCurrentWeekStartDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_WEEK, 1);
        return DateUtil.beginOfDay(calendar.getTime());
    }

    /**
     * 获得本周最后一天 周六 23:59:59
     */
    public static Date getCurrentWeekEndDay() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getCurrentWeekStartDay());
        cal.add(Calendar.DATE, 6);
        return DateUtil.endOfDay(cal.getTime());
    }

    /**
     * 近七天开始时间
     *
     * @return
     */
    public static Date getNeverSevenStartTime() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.add(Calendar.DATE, -7);
        return DateUtil.beginOfDay(calendar.getTime());
    }

    /**
     * 近七天结束时间
     *
     * @return
     */
    public static Date getNeverSevenEndTime() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(getNeverSevenStartTime());
        calendar.add(Calendar.DATE, 6);
        return DateUtil.endOfDay(calendar.getTime());
    }

    /**
     * 昨天开始时间
     *
     * @return
     */
    public static Date getYesterdayStartTime() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.add(Calendar.DATE, -1);
        return DateUtil.beginOfDay(calendar.getTime());
    }

    /**
     * 昨天结束时间
     *
     * @return
     */
    public static Date getYesterdayEndTime() {
        return DateUtil.endOfDay(getYesterdayStartTime());
    }

    /**
     * 今天开始时间
     *
     * @return
     */
    public static Date getTodayStartTime() {
        return DateUtil.beginOfDay(new Date());
    }

    /**
     * 今天结束时间
     *
     * @return
     */
    public static Date getTodayEndTime() {
        return DateUtil.endOfDay(new Date());
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值