Date8Util

package com.exmind.utils.date;/**
* Created by DELL on 2017/6/2.
*/

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
* jdk8 时间工具类
*
* @author pengXiaoLin
* @create 2017-06-02 8:49
**/
public class Date8Util {

/**
 * 获取默认时间格式: yyyy-MM-dd HH:mm:ss
 */
private static final DateTimeFormatter DEFAULT_DATETIME_FORMATTER = TimeFormat.LONG_DATE_PATTERN_LINE.formatter;

private Date8Util() {
    // no construct function
}

/**
 * String 转时间
 *
 * @param timeStr
 * @return
 */
public static LocalDateTime parseTime(String timeStr) {
    return LocalDateTime.parse(timeStr, DEFAULT_DATETIME_FORMATTER);
}

/**
 * String 转时间
 *
 * @param timeStr
 * @param format  时间格式
 * @return
 */
public static LocalDateTime parseTime(String timeStr, TimeFormat format) {
    return LocalDateTime.parse(timeStr, format.formatter);
}

/**
 * 时间转 String
 *
 * @param time
 * @return
 */
public static String parseTime(LocalDateTime time) {
    return DEFAULT_DATETIME_FORMATTER.format(time);
}

/**
 * 时间转 String
 *
 * @param time
 * @param format 时间格式
 * @return
 */
public static String parseTime(LocalDateTime time, TimeFormat format) {
    return format.formatter.format(time);
}

/**
 * 获取当前时间
 * 返回默认格式 2017-06-02 18:41:15
 *
 * @return
 */
public static String getCurrentDatetime() {
    return DEFAULT_DATETIME_FORMATTER.format(LocalDateTime.now());
}

/**
 * 获取当前时间
 * 返回特定的格式
 *
 * @param format 时间格式
 * @return
 */
public static String getCurrentDatetime(TimeFormat format) {
    return format.formatter.format(LocalDateTime.now());
}

/**
 * date 转 LocalDateTime
 *
 * @param date
 * @return
 */
public static LocalDateTime dateToLocalDateTime(java.util.Date date) {
    Instant instant = date.toInstant();
    ZoneId zone = ZoneId.systemDefault();
    return LocalDateTime.ofInstant(instant, zone);
}

/**
 * date 转 LocalDate
 *
 * @param date
 * @return
 */
public static LocalDate dateToLocalDate(java.util.Date date) {
    Instant instant = date.toInstant();
    ZoneId zone = ZoneId.systemDefault();
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
    return localDateTime.toLocalDate();
}

/**
 * date 转 LocalTime
 *
 * @param date
 * @return
 */
public static LocalTime dateToLocalTime(java.util.Date date) {
    Instant instant = date.toInstant();
    ZoneId zone = ZoneId.systemDefault();
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
    return localDateTime.toLocalTime();
}

/**
 * LocalDateTime 转 java.util.Date
 *
 * @return
 */
public static Date LocalDateTimeToUdate(LocalDateTime localDateTime) {
    ZoneId zone = ZoneId.systemDefault();
    Instant instant = localDateTime.atZone(zone).toInstant();
    return Date.from(instant);
}

/**
 * 计算两个时间的相差天数
 *
 * @param start 开始时间
 * @param end   结束时间
 * @return
 */
public static long between(Date start, Date end) {
    LocalDate beginDate = dateToLocalDate(start);
    LocalDate endDate = dateToLocalDate(end);
    return endDate.toEpochDay() - beginDate.toEpochDay();
}

/**
 * 计算与当天的相差天数
 *
 * @param date
 * @return
 */
public static long betweenToDay(Date date) {
    LocalDate beginDate = dateToLocalDate(date);
    LocalDate endDate = dateToLocalDate(new Date());
    return endDate.toEpochDay() - beginDate.toEpochDay();
}

/**
 * 判断两个时间段 是否有交集
 * 注意每隔时间段的结束时间一定更要大于开始时间 我这里就不做这个判断了
 *
 * @param leftStartDate
 * @param leftEndDate
 * @param rightStartDate
 * @param rightEndDate
 * @return
 */
public static boolean isOverlap(Date leftStartDate, Date leftEndDate, Date rightStartDate, Date rightEndDate) {
    boolean bool = false;
    if (between(rightStartDate, leftEndDate) >= 0 && between(leftStartDate, rightEndDate) >= 0) {
        bool = true;
    }
    return bool;

}

/**
 * 判断两个时间段 是否有交集
 * 注意每隔时间段的结束时间一定更要大于开始时间 我这里就不做这个判断了
 *
 * @param startdate1
 * @param enddate1
 * @param startdate2
 * @param enddate2
 * @return
 * @throws ParseException
 */
public static boolean isOverlap(String startdate1, String enddate1, String startdate2, String enddate2) throws ParseException {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    Date leftStartDate = null;
    Date leftEndDate = null;
    Date rightStartDate = null;
    Date rightEndDate = null;
    try {
        leftStartDate = format.parse(startdate1);
        leftEndDate = format.parse(enddate1);
        rightStartDate = format.parse(startdate2);
        rightEndDate = format.parse(enddate2);
    } catch (ParseException e) {
        return false;
    }
    boolean bool = false;
    if (between(rightStartDate, leftEndDate) >= 0 && between(leftStartDate, rightEndDate) >= 0) {
        bool = true;
    }
    return bool;
}
/**
 * 时间字符串格式化,如果format为null,返回默认的格式
 * @param dateTime
 * @param format
 * @return
 */
/*public static String format(String dateTime,TimeFormat format){
    if (StringUtils.isEmpty(dateTime)) {
        return null;
    }
    if (null == format) {
          TemporalAccessor a = DEFAULT_DATETIME_FORMATTER.parse(dateTime);
        return "";
    }
    return format.formatter.parse(dateTime).toString();
}*/

/**
 * 时间格式
 */
public enum TimeFormat {

    /**
     * 短时间格式
     */
    SHORT_DATE_PATTERN_LINE("yyyy-MM-dd"),
    SHORT_DATE_PATTERN_SLASH("yyyy/MM/dd"),
    SHORT_DATE_PATTERN_DOUBLE_SLASH("yyyy\\MM\\dd"),
    SHORT_DATE_PATTERN_NONE("yyyyMMdd"),

    /**
     * 长时间格式
     */
    LONG_DATE_PATTERN_LINE("yyyy-MM-dd HH:mm:ss"),
    LONG_DATE_PATTERN_SLASH("yyyy/MM/dd HH:mm:ss"),
    LONG_DATE_PATTERN_DOUBLE_SLASH("yyyy\\MM\\dd HH:mm:ss"),
    LONG_DATE_PATTERN_NONE("yyyyMMdd HH:mm:ss"),

    /**
     * 长时间格式 带毫秒
     */
    LONG_DATE_PATTERN_WITH_MILSEC_LINE("yyyy-MM-dd HH:mm:ss.SSS"),
    LONG_DATE_PATTERN_WITH_MILSEC_SLASH("yyyy/MM/dd HH:mm:ss.SSS"),
    LONG_DATE_PATTERN_WITH_MILSEC_DOUBLE_SLASH("yyyy\\MM\\dd HH:mm:ss.SSS"),
    LONG_DATE_PATTERN_WITH_MILSEC_NONE("yyyyMMdd HH:mm:ss.SSS");

    private transient DateTimeFormatter formatter;

    TimeFormat(String pattern) {
        formatter = DateTimeFormatter.ofPattern(pattern);
    }
}


public static void main(String[] args) {
    try {
        boolean b = isOverlap("2017-05-01", "2017-06-01", "2017-06-01", "2017-08-30");
        System.out.println(b);
    } catch (ParseException e) {
        e.printStackTrace();
    }

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值