LocalDateTime工具类
方式1
这种官方的工具类挺不错,就是要看文档找,推荐这种工具包
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.2.3</version> </dependency>
方式2
时间相关的基本操作,没有处理异常,自己注意
package untils; import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.Date; /** * @author CBeann * @create 2020-06-04 14:52 */ public class LocalDateTimeUtils { //默认使用系统当前时区 private static final ZoneId ZONE = ZoneId.systemDefault(); /** * 转换格式1:通用转换格式:yyyy-MM-dd HH:mm:ss */ public static final String YYYY_MM_DD_HH_MM_SS_PATTERN = "yyyy-MM-dd HH:mm:ss"; /** * 转换格式2:年-月-日 */ public static final String YYYY_MMDD_PATTERN = "yyyy-MM-dd"; //---------------->Local* fromat to String /** * @param format 获取的当前LocalDateTime并且格式化 * @return */ public static String NowLocalDateTimeByFormat(String format) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); LocalDateTime now = LocalDateTime.now(); return now.format(dateTimeFormatter); } /** * @param format 把LocalDateTime并且格式化 * @return */ public static String LocalDateTimeByFormat(LocalDateTime localDateTime, String format) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); return localDateTime.format(dateTimeFormatter); } /** * @param format 把LocalDate并且格式化 * @return */ public static String LocalDateByFormat(LocalDate localDate, String format) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); return localDate.format(dateTimeFormatter); } //---------------->Date to Local* /** * 将Date转换成LocalDateTime * * @param d date * @return */ public static LocalDateTime dateToLocalDateTime(Date d) { Instant instant = d.toInstant(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZONE); return localDateTime; } /** * 将Date转换成LocalDate * * @param d date * @return */ public static LocalDate dateToLocalDate(Date d) { Instant instant = d.toInstant(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZONE); return localDateTime.toLocalDate(); } /** * 将Date转换成LocalTime * * @param d date * @return */ public static LocalTime dateToLocalTime(Date d) { Instant instant = d.toInstant(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZONE); return localDateTime.toLocalTime(); } //---------------->Local* to date /** * 将LocalDate转换成Date * * @param localDate * @return date */ public static Date localDateToDate(LocalDate localDate) { Instant instant = localDate.atStartOfDay().atZone(ZONE).toInstant(); return Date.from(instant); } /** * 将LocalDateTime转换成Date * * @param localDateTime * @return date */ public static Date localDateTimeToDate(LocalDateTime localDateTime) { Instant instant = localDateTime.atZone(ZONE).toInstant(); return Date.from(instant); } //---------------->string to Local* /** * 将相应格式yyyy-MM-dd的字符串转化为LocalDate * * @param time string * @param format string * @return date */ public static LocalDate stringToLocalDate(String time, String format) { DateTimeFormatter f = DateTimeFormatter.ofPattern(format); if (YYYY_MMDD_PATTERN.equals(format)) { return LocalDate.parse(time, f); } return null; } /** * 将相应格式yyyy-MM-dd HH:mm:ss 的字符串转化为 LocalDateTime * * @param time string * @param format string * @return date */ public static LocalDateTime stringToLocalDateTime(String time, String format) { DateTimeFormatter f = DateTimeFormatter.ofPattern(format); if (YYYY_MM_DD_HH_MM_SS_PATTERN.equals(format)) { return LocalDateTime.parse(time, f); } return null; } //---------------->getBefore LocalDateTime /** * before 参数小于0 * after 大于0 * =0 表示不大不小 * * @param localDateTime * @param year * @param month * @param day * @param hour * @param minute * @param sencod * @return */ public static LocalDateTime getBeforeOrAfterLocalDateTime(LocalDateTime localDateTime, int year, int month, int day, int hour, int minute, int sencod) { if (year != 0) { localDateTime = localDateTime.plusYears(year); } if (month != 0) { localDateTime = localDateTime.plusMonths(month); } if (day != 0) { localDateTime = localDateTime.plusDays(day); } if (hour != 0) { localDateTime = localDateTime.plusHours(hour); } if (minute != 0) { localDateTime = localDateTime.plusMinutes(minute); } if (sencod != 0) { localDateTime = localDateTime.plusSeconds(sencod); } return localDateTime; } /** * 获得LocalDateTime这个月的的第一天 * @return */ LocalDateTime getMonthFirstday(LocalDateTime localDateTime) { DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDateTime date = localDateTime; LocalDateTime firstday = date.with(TemporalAdjusters.firstDayOfMonth()); return firstday; } /** * 获得LocalDateTime这个月的最后一天 * @return */ LocalDateTime getMonthLastday(LocalDateTime localDateTime) { DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDateTime date = localDateTime; LocalDateTime lastDay = date.with(TemporalAdjusters.lastDayOfMonth()); return lastDay; } /** * 获得Localdatetime的星期 */ public int getWeekNum(LocalDateTime localDateTime){ System.out.println("week is " + localDateTime.getDayOfWeek()); System.out.println("week is " + localDateTime.getDayOfWeek().getValue()); return localDateTime.getDayOfWeek().getValue(); } }
Date工具类
方式1
这种官方的工具类挺不错,就是要看文档找,推荐这种工具包
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.2.3</version> </dependency>
方式2
package untils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class TimeUtils { /** * 转换格式1:通用转换格式:yyyy-MM-dd HH:mm:ss */ public static final String CURRENT_PATTERN = "yyyy-MM-dd HH:mm:ss"; /** * 转换格式2:年-月-日 */ public static final String YYYYMMDD_PATTERN = "yyyy-MM-dd"; /** * 星期几 */ private static final String weekNames[] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; /** * 获取 获取格式转换器(带格式) * <p> * Description: * </p> * * @author Tianyu Xiao * @date 2019年3月20日下午7:03:04 */ private static SimpleDateFormat getSimpleDateFormat(String pattern) { return new SimpleDateFormat(pattern); } /** * 获取 获取格式转换器(不带格式) * <p> * Description: * </p> * * @author Tianyu Xiao * @date 2019年3月20日下午11:16:45 */ private static SimpleDateFormat getSimpleDateFormat() { return new SimpleDateFormat(); } /** * 根据时间类型转为字符串类型 * <p> * Description: * </p> * * @author Tianyu Xiao * @date 2019年3月20日下午7:03:33 */ public static String dateFormatWithPattern(Date date, String pattern) { return getSimpleDateFormat(pattern).format(date); } /** * 根据字符串转化为日期类型 * <p> * Description: * </p> * * @author Tianyu Xiao * @date 2019年3月20日下午11:17:32 */ public static Date dateFormatWithPattern(String date) throws ParseException { return getSimpleDateFormat(CURRENT_PATTERN).parse(date); } /** * 根据格式将字符串转换为日期类型 * <p> * Description: * </p> * * @author Tianyu Xiao * @date 2019年3月22日下午10:41:13 */ public static Date dateFormatWithPatternWithPattern(String date, String pattern) throws ParseException { return getSimpleDateFormat(pattern).parse(date); } /** * 获取前n天日期的字符串 * <p> * Description: * </p> * * @author Tianyu Xiao * @date 2019年3月20日下午9:24:59 */ public static String getBeforeDayString(Date date, int day, String pattern) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DATE, -day); date = calendar.getTime(); String dateString = getSimpleDateFormat(pattern).format(date); return dateString; } /** * 获取后n天日期的字符串 * <p> * Description: * </p> * * @author Tianyu Xiao * @date 2019年3月27日下午1:01:47 */ public static String getNextDayString(Date date, int day, String pattern) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DATE, day); date = calendar.getTime(); String dateString = getSimpleDateFormat(pattern).format(date); return dateString; } /** * 获取当前时间的前N小时 * <p> * Description: * </p> * * @author Tianyu Xiao * @date 2019年3月20日下午11:13:20 */ public static String getBeforeHourDay(Date date, int hour, String pattern) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.HOUR_OF_DAY, -hour); date = calendar.getTime(); String dateString = getSimpleDateFormat(pattern).format(date); return dateString; } /** * 获取当前时间的后N小时 * <p> * Description: * </p> * * @author Tianyu Xiao * @date 2019年3月20日下午11:14:48 */ public static String getNextHourDay(Date date, int hour, String pattern) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.HOUR_OF_DAY, hour); date = calendar.getTime(); String dateString = getSimpleDateFormat(pattern).format(date); return dateString; } /** * 获取当前时间的前n个月 * <p> * Description: * </p> * * @author Tianyu Xiao * @date 2019年3月21日下午12:37:55 */ public static String getBeforeMonthDay(Date date, int n, String pattern) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, -n); date = calendar.getTime(); String dateString = getSimpleDateFormat(pattern).format(date); return dateString; } /** * 获取一个月的最后一天 * <p> * Description: * </p> * * @author Tianyu Xiao * @date 2019年3月21日下午1:23:06 */ public static String getLastDayOfMonth(Date date, String pattern) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); String lastDay = getSimpleDateFormat(pattern).format(calendar.getTime()); return lastDay; } /** * 获取一个月的第一天 * <p> * Description: * </p> * * @author Tianyu Xiao * @date 2019年3月21日下午1:23:06 */ public static String getFirstDayOfMonth(Date date, String pattern) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); String lastDay = getSimpleDateFormat(pattern).format(calendar.getTime()); return lastDay; } /** * 获取这一天是周几 * <p> * Description: * </p> * * @author Tianyu Xiao * @date 2019年3月22日下午10:18:07 */ public static String getDayOfWeek(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (dayOfWeek < 0) dayOfWeek = 0; return weekNames[dayOfWeek]; } /** * 判断两个日期相差得天数 * day1:前面得天数 * day2:后面得天数 * <p>Description: </p> * * @author Tianyu Xiao * @date 2019年3月29日下午1:26:04 */ public static long getTwoDayDifference(String day1, String day2) throws ParseException { Date oDate = dateFormatWithPatternWithPattern(day1, YYYYMMDD_PATTERN); Date fDate = dateFormatWithPatternWithPattern(day2, YYYYMMDD_PATTERN); long days = (fDate.getTime() - oDate.getTime()) / (1000 * 3600 * 24); return days; } public static void main(String[] args) throws ParseException { //String res = stringDateFormat("2019-10-14-14:43:04", "yyyy-MM-dd-HH:mm:ss", "yyyy-MM-dd HH:mm:ss"); Date date = dateFormatWithPattern("2019-12-31 14:43:04"); System.out.println(isLastDayOfMonth(date)); } /** * 将旧时间格式转换新时间格式 * <p>Description: </p> * * @author Tianyu Xiao * @date 2019年10月21日下午2:51:09 */ public static String stringDateFormat(String date, String oldPattern, String newPattern) throws ParseException { SimpleDateFormat simpleDateFormat = getSimpleDateFormat(oldPattern); Date dateTime = simpleDateFormat.parse(date); simpleDateFormat = getSimpleDateFormat(newPattern); return simpleDateFormat.format(dateTime); } /** * 判断该日期是否是该月的第一天 * <p>Description: </p> * * @author Tianyu Xiao * @date 2019年12月2日下午8:37:19 */ public static boolean isFirstDayOfMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); System.out.println(calendar.get(Calendar.MONTH)); return calendar.get(Calendar.DAY_OF_MONTH) == 1; } /** * 判断该日期是否是该月的最后一天 * <p>Description: </p> * * @author Tianyu Xiao * @date 2019年12月2日下午8:36:58 */ public static boolean isLastDayOfMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.DAY_OF_MONTH) == calendar .getActualMaximum(Calendar.DAY_OF_MONTH); } }
注意
在使用MyBatis时对象用Date合适,用LocalDateTime就出错,百度查的答案是 mybaits版本问题(我没有试),所以如果打算用LocalDateTime 作为entity的属性,先测试好在用