四时宝库

程序员的知识宝库

创建定时任务的几种方式,你还不会?

MySQL驱动中关于时间的坑(mysql数据库时间校准)

MySQL驱动中关于时间的坑

jdk8Date LocalDateTime类学习笔记

jdk8日期Date LocalDate LocalTime LocalDateTime类学习笔记

jdk8以前

Date

Java LocalDate 类 和 Date 类(java的localdatetime)

LocalDate 类和 Date 类都是用于处理日期的类,其中LocalData是Java 8 引入的日期时间类,其中还同时引入了LocalTime、LocalDateTime。

java.time.LocalDateTime` not supported by default 日期序列化问题

问题描述

将一个包含LocalDateTime对象的集合进行序列化和反序列化时,可能会遇到以下异常:

日期时间API之TemporalAdjusters与TemporalAdjuster

TemporalAdjusters与TemporalAdjuster的作用在于提供了一种统一的、类型安全的方式来处理日期时间的操作。在过去的版本中,Java的日期时间API主要依赖于Calendar类,但这个类在处理复杂的日期时间操作时显得不够灵活和类型安全。TemporalAdjusters的出现弥补了这一缺陷,使得日期时间操作更加简洁、易用和类型安全。

java date对象的正确使用方法(java中的date类型)

LocalDate为日期,前端如果传日期要用此对象接收。

LocalDateTime为日期时间,前端如果传日期时间要用此对象接收。

如果是前端传过来的一般为字符串,所以需要在属性上添加解析注解,否则直接接收会出现转换错误

Java8日期时间类使用详解,干货满满,不容错过哦

1 获取当前时间

// 代码
@Test
public void now(){
  LocalDate localDate = LocalDate.now();
  log.info("日期:"+ localDate);
  LocalTime localTime = LocalTime.now();
  log.info("时间:"+ localTime);
  LocalDateTime localDateTime = LocalDateTime.now();
  log.info("日期时间:"+ localDateTime);
}
// 输出
INFO - 日期:2023-09-05
INFO - 时间:22:28:21.994
INFO - 日期时间:2023-09-05T22:28:21.994

分享jdk1.8特性LocalDateTime操作日期工具类

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;

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

/**
 * @author javawency
 * @description: 时间工具类
 **/
public class Date2Utils {

    /**
     * 时间对象转字符串
     *
     * @param date
     * @return
     * @throws ParseException
     */
    public static String dateToStr(Date date) {
        SimpleDateFormat format = new SimpleDateFormat(DatePattern.NORM_DATETIME_PATTERN);
        return format.format(date);
    }

    /**
     * 时间对象转字符串
     *
     * @param date
     * @param pattern
     * @return
     * @throws ParseException
     */
    public static String dateToStr(Date date, String pattern) {
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        return format.format(date);
    }

    /**
     * 字符串转时间对象
     *
     * @param dateStr
     * @return
     * @throws ParseException
     */
    public static Date strToDate(String dateStr) throws ParseException {
        SimpleDateFormat format = new SimpleDateFormat(DatePattern.NORM_DATETIME_PATTERN);
        Date date = format.parse(dateStr);
        return date;
    }

    /**
     * 字符串转时间对象
     *
     * @param dateStr
     * @param pattern
     * @return
     * @throws ParseException
     */
    public static Date strToDate(String dateStr, String pattern) throws ParseException {
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        Date date = format.parse(dateStr);
        return date;
    }

    /**
     * 获取两个日期相差的天数
     *
     * @param date    开始时间
     * @param endDate 结束时间
     * @return 返回相差天数
     * @throws ParseException
     */
    public static long getBetweenDay(Date date, Date endDate) throws ParseException {
        SimpleDateFormat dfs = new SimpleDateFormat(DatePattern.NORM_DATE_PATTERN);
        String dateStr = dfs.format(date);
        String endDateStr = dfs.format(endDate);
        Date parseDate = dfs.parse(dateStr);
        Date parseEndDate = dfs.parse(endDateStr);
        long day = DateUtil.between(parseDate, parseEndDate, DateUnit.DAY);
        return day;
    }


    /**
     * 今天的开始时间
     *
     * @return yyyy-MM-dd 00:00:00
     */
    public static String dayStart() {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
        LocalDateTime todayStart = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
        String dayStartStr = todayStart.format(dateTimeFormatter);
        return dayStartStr;
    }

    /**
     * 今天的结束时间
     *
     * @return yyyy-MM-dd 23:59:59
     */
    public static String dayEnd() {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
        LocalDateTime dayEnd = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
        String dayEndStr = dayEnd.format(dateTimeFormatter);
        return dayEndStr;
    }

    /**
     * 本周开始时间
     *
     * @return yyyy-MM-dd 00:00:00
     */
    public static String weekStart() {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
        LocalDateTime localDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
        TemporalAdjuster firstWeek = TemporalAdjusters.ofDateAdjuster(localDate -> localDate.minusDays(localDate.getDayOfWeek().getValue() - DayOfWeek.MONDAY.getValue()));
        String weekStart = localDateTime.with(firstWeek).format(dateTimeFormatter);
        return weekStart;
    }

    /**
     * 本周结束时间
     *
     * @return yyyy-MM-dd 23:59:59
     */
    public static String weekEnd() {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
        LocalDateTime todayEnd = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
        TemporalAdjuster lastWeek = TemporalAdjusters.ofDateAdjuster(localDate -> localDate.plusDays(DayOfWeek.SUNDAY.getValue() - localDate.getDayOfWeek().getValue()));
        String weekEnd = todayEnd.with(lastWeek).format(dateTimeFormatter);
        return weekEnd;
    }

    /**
     * 本月开始时间
     *
     * @return yyyy-MM-dd 00:00:00
     */
    public static String monthStart() {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
        LocalDateTime localDateTime = LocalDateTime.now();
        LocalDate localDate = LocalDate.of(localDateTime.getYear(), localDateTime.getMonth(), 1);
        String monthStart = LocalDateTime.of(localDate, LocalTime.MIN).format(dateTimeFormatter);
        return monthStart;
    }

    /**
     * 本月结束时间
     *
     * @return yyyy-MM-dd 23:59:59
     */
    public static String monthEnd() {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
        LocalDateTime todayEnd = LocalDateTime.now();
        LocalDateTime with = todayEnd.with(TemporalAdjusters.lastDayOfMonth());
        LocalDateTime localDateTime = LocalDateTime.of(with.toLocalDate(), LocalTime.MAX);
        String monthEnd = localDateTime.format(dateTimeFormatter);
        return monthEnd;
    }

    /**
     * 今年开始时间
     *
     * @return yyyy-MM-dd 00:00:00
     */
    public static String yearStart() {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
        LocalDateTime localDateTime = LocalDateTime.now();
        LocalDate localDate = LocalDate.of(localDateTime.getYear(), 1, 1);
        String yearStart = LocalDateTime.of(localDate, LocalTime.MIN).format(dateTimeFormatter);
        return yearStart;
    }

    /**
     * 今年结束时间
     *
     * @return yyyy-MM-dd 23:59:59
     */
    public static String yearEnd() {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
        LocalDateTime todayEnd = LocalDateTime.now();
        LocalDateTime with = todayEnd.with(TemporalAdjusters.lastDayOfYear());
        LocalDateTime localDateTime = LocalDateTime.of(with.toLocalDate(), LocalTime.MAX);
        String yearEnd = localDateTime.format(dateTimeFormatter);
        return yearEnd;
    }

    /**
     * 重置秒
     *
     * @param date
     * @param second
     * @return
     */
    public static Date resetSecond(Date date, int second) {
        if (second < 0 || second > 59) {
            return date;
        }
        LocalDateTime localDate = dateToLocalDateTime(date);
        localDate = localDate.withSecond(second);
        Date newDate = localDateTimeToDate(localDate);
        return newDate;
    }

    /**
     * 重置秒
     *
     * @param dateStr
     * @param second
     * @return
     * @throws ParseException
     */
    public static Date resetSecond(String dateStr, int second) throws ParseException {
        if (second < 0 || second > 59) {
            return strToDate(dateStr);
        }
        Date date = strToDate(dateStr);
        LocalDateTime localDate = dateToLocalDateTime(date);
        localDate = localDate.withSecond(second);
        Date newDate = localDateTimeToDate(localDate);
        return newDate;
    }

    public static Date localDateToDate(LocalDate localDate) {
        return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
    }

    public static LocalDate dateToLocalDate(Date date) {
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
        LocalDate localDate = localDateTime.toLocalDate();
        return localDate;
    }

    public static Date localDateTimeToDate(LocalDateTime localDateTime) {
        ZoneId zoneId = ZoneId.systemDefault();
        ZonedDateTime zdt = localDateTime.atZone(zoneId);
        Date date = Date.from(zdt.toInstant());
        return date;
    }

    public static LocalDateTime dateToLocalDateTime(Date date) {
        Instant instant = date.toInstant();
        ZoneId zoneId = ZoneId.systemDefault();
        LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
        return localDateTime;
    }

    /**
     * 判断两个时间是否相等
     *
     * @param date
     * @param date2
     * @return
     */
    public static boolean equal(Date date, Date date2) {
        LocalDateTime localDateTime = dateToLocalDateTime(date);
        LocalDateTime localDateTime2 = dateToLocalDateTime(date2);
        return localDateTime.isEqual(localDateTime2);
    }

    /**
     * 判断date 日期是否小于date2
     *
     * @param date
     * @param date2
     * @return
     */
    public static boolean after(Date date, Date date2) {
        LocalDateTime localDateTime = dateToLocalDateTime(date);
        LocalDateTime localDateTime2 = dateToLocalDateTime(date2);
        return localDateTime.isAfter(localDateTime2);
    }

    /**
     * 比较日期相差多少天
     *
     * @param date
     * @param date2
     * @return
     */
    public static int differenceDays(Date date, Date date2) {
        LocalDate localDateTime = dateToLocalDate(date);
        LocalDate localDateTime2 = dateToLocalDate(date2);
        Period period = Period.between(localDateTime, localDateTime2);
        return period.getDays();
    }

    public static int differenceDays(LocalDate localDate, LocalDate localDate2) {
        Period period = Period.between(localDate, localDate2);
        return period.getDays();
    }

}

教你如何优雅地用Java8 实现日期时间的操作

作者 | Java圣斗士 | 原创文章,转载请注明出处

全文4000字,阅读大约需要15分钟,建议收藏

小花:Hey,Morty。最近正在准备面试,你说Java8 的新特性会不会考到呢?

<< < 1 2 3 4 > >>
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接