写点什么

日期工具类 - 操作字符串和 Date、LocalDate 互转,两个日期的时间差等

作者:共饮一杯无
  • 2022-11-20
    浙江
  • 本文字数:4022 字

    阅读完需:约 13 分钟

日期工具类-操作字符串和Date、LocalDate互转,两个日期的时间差等

避免重复造轮子,相关方法基于 hutool 日期时间工具封装并做部分增强。需要先引入如下坐标


          <dependency>              <groupId>cn.hutool</groupId>              <artifactId>hutool-all</artifactId>              <version>${hutool.version}</version>          </dependency>
复制代码

字符串转 Date

    //字符串转Date    Date dateTime = DateUtil.parseDate("2022-04-06");    System.out.println(dateTime);
复制代码

Date 转字符串

//Date转字符串不指定format格式,默认yyyy-MM-dd HH:mm:ssString dateStr = DateUtil.date2Str(new Date());System.out.println(dateStr);//Date转字符串指定格式String dateStr2 = DateUtil.date2Str("yyyy/MM/dd",new Date());System.out.println(dateStr2);
复制代码

字符串转 LocalDate

//字符串转LocalDateLocalDate localDate = DateUtil.parseLocalDate("2022-04-06");System.out.println(localDate);
复制代码

Date 转 LocalDate

//Date转LocalDateLocalDate localDate = DateUtil.date2LocalDate(new Date());System.out.println(localDate);
复制代码

LocalDate 转字符串

//LocalDate转StrString localDateStr = DateUtil.localDate2Str(LocalDate.now());System.out.println(localDateStr);
复制代码

两个日期的时间差

String beginDateStr = "2022-02-01 22:33:23";Date beginDate = DateUtil.parse(beginDateStr);
String endDateStr = "2022-03-10 23:33:23";Date endDate = DateUtil.parse(endDateStr);//相差天数(37)long betweenDay = DateUtil.between(beginDate, endDate, DateUnit.DAY);System.out.println(betweenDay);//格式化时间差(37天1小时)String formatBetween = DateUtil.formatBetween(beginDate, endDate, BetweenFormater.Level.HOUR);System.out.println(formatBetween);
复制代码

一天的开始和结束时间

String dateStr = "2022-04-07 10:33:23";Date date = DateUtil.parse(dateStr);
//一天的开始时间:2022-04-07 00:00:00Date beginOfDay = DateUtil.beginOfDay(date);System.out.println(beginOfDay);
//一天的结束时间:2022-04-07 23:59:59Date endOfDay = DateUtil.endOfDay(date);System.out.println(endOfDay);
复制代码

工具类如下:

/** * <p>基于hutool的日期工具类增强</p> * * @author zjq * @date 2021/04/07 */public class DateUtil extends cn.hutool.core.date.DateUtil {
private static final String[] PARSE_PATTERNS = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
public static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss"); public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); public static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
/** * 字符串转date类型 * * @param dateStr * @return */ public static Date parseDate(Object dateStr) { if (ObjectUtils.isNull(dateStr)) { return null; } if (dateStr instanceof Double) { return org.apache.poi.ss.usermodel.DateUtil.getJavaDate((Double) dateStr); } return parse(dateStr.toString(), PARSE_PATTERNS); }
/** * Date类型转字符串 * * @param date * @return yyyy-MM-dd HH:mm:ss */ public static String date2Str(Date date) { return date2Str(null, date); }
/** * Date类型转字符串 * * @param format * @param date * @return */ public static String date2Str(String format, Date date) { if (ObjectUtils.isNull(date)) { return null; } SimpleDateFormat dateFormat = StrUtil.isNotBlank(format) ?new SimpleDateFormat(format): new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return dateFormat.format(date); }
/** * 字符串转LocalTime类型 * * @param dateStr * @return */ public static LocalTime parseLocalTime(Object dateStr) { if (ObjectUtils.isNull(dateStr)) { return null; } if (dateStr instanceof Double) { return date2LocalTime(parseDate(dateStr)); } return LocalTime.parse(dateStr.toString(), TIME_FORMATTER); }
/** * Date转LocalTime * * @param date * @return */ public static LocalTime date2LocalTime(Date date) { if (null == date) { return null; } return date.toInstant().atZone(ZoneId.systemDefault()).toLocalTime(); }
/** * LocalTime转Str * * @param localTime * @return HH:mm:ss */ public static String localTime2Str(LocalTime localTime) { return localTime2Str(null, localTime); }
/** * LocalTime转str * * @param format 格式 * @param localTime * @return */ public static String localTime2Str(String format, LocalTime localTime) { if (null == localTime) { return null; } DateTimeFormatter formatter = StrUtil.isBlank(format) ? TIME_FORMATTER : DateTimeFormatter.ofPattern(format); return localTime.format(formatter); }
/** * 字符串转LocalDate类型 * * @param dateStr * @return */ public static LocalDate parseLocalDate(Object dateStr) { if (ObjectUtils.isNull(dateStr)) { return null; } if (dateStr instanceof Double) { return date2LocalDate(parseDate(dateStr)); } return LocalDate.parse(dateStr.toString(), DATE_FORMATTER); }
/** * Date转LocalDate * * @param date * @return */ public static LocalDate date2LocalDate(Date date) { if (null == date) { return null; } return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); }
/** * LocalDate转Str * * @param localDate * @return */ public static String localDate2Str(LocalDate localDate) { return localDate2Str(null, localDate); }
/** * LocalDate转Str * * @param format 格式 * @param localDate * @return */ public static String localDate2Str(String format, LocalDate localDate) { if (null == localDate) { return null; } DateTimeFormatter formatter = StrUtil.isBlank(format) ? DATE_FORMATTER : DateTimeFormatter.ofPattern(format); return localDate.format(formatter); }
/** * 字符串转LocalDateTime类型 * * @param dateStr * @return */ public static LocalDateTime parseLocalDateTime(Object dateStr) { if (ObjectUtils.isNull(dateStr)) { return null; } if (dateStr instanceof Double) { return date2LocalDateTime(parseDate(dateStr)); } return LocalDateTime.parse(dateStr.toString(), DATETIME_FORMATTER); }
/** * Date转LocalDateTime * * @param date * @return */ public static LocalDateTime date2LocalDateTime(Date date) { if (null == date) { return null; } return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); }
/** * LocalDate转Str * * @param localDateTime * @return */ public static String localDateTime2Str(LocalDateTime localDateTime) { return localDateTime2Str(null, localDateTime); }
/** * LocalDate转Str * * @param format * @param localDateTime * @return */ public static String localDateTime2Str(String format, LocalDateTime localDateTime) { if (null == localDateTime) { return null; } DateTimeFormatter formatter = StrUtil.isBlank(format) ? DATETIME_FORMATTER : DateTimeFormatter.ofPattern(format); return localDateTime.format(formatter); }}
复制代码


参考:https://www.hutool.cn/docs/#/core/日期时间/日期时间工具-DateUtil


本文内容到此结束了,

如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。

如有错误❌疑问💬欢迎各位大佬指出。

主页共饮一杯无的博客汇总👨‍💻

保持热爱,奔赴下一场山海。🏃🏃🏃

发布于: 2022-11-20阅读数: 27
用户头像

鲜衣怒马意气风发,愿你归来仍是少年。 2018-10-19 加入

全栈开发者,CSDN博客专家,51CTO 专家博主,阿里云专家博主,华为云享专家,持续输出干货,欢迎关注。

评论

发布
暂无评论
日期工具类-操作字符串和Date、LocalDate互转,两个日期的时间差等_Java_共饮一杯无_InfoQ写作社区