日期与字符串相互转化(自定义日期工具类总结,Hutool工具类使用)

一、将日期格式化成字符串输出(Date转String)

Java旧的时间API饱受诟病,Java8以后提供了新的时间API,在java.time包下。

  //获取当前时间
  LocalDateTime date=LocalDateTime.now();
  //创建日期时间对象格式化器,日期格式类似: 2023-05-23 22:18:38
  DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  //将时间转化为对应格式的字符串
  String fomateDate=date.format(formatter).toString();

二、将日期字符串还原为对应的日期(String转Date)

//创建日期时间对象格式化器,日期格式类似: 2023-05-23 22:18:38
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//时间格式字符串
String sDate="2023-05-23 22:18:38";
//将时间格式字符串转化为LocalDateTime对象,需传入日期对象格式化器
LocalDateTime parseDate=LocalDateTime.parse(sDate,formatter);

三、常见的日期工具类使用

        由于日期和字符串之间的相互转化是常见的操作,特别是在处理时间相关的业务逻辑时。下面是一些常用的日期工具类的总结,可以帮助我们更方便地进行日期和字符串的转换。

① SimpleDateFormat 类:用于格式化日期,将日期转换为指定格式的字符串。例如,将日期转换为“yyyy-MM-dd”格式的字符串:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
String dateStr = sdf.format(new Date());

② DateTimeFormatter 类:Java 8 引入的日期时间格式化类,用于格式化日期和时间。例如,将日期转换为“yyyy-MM-dd”格式的字符串:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 
String dateStr = LocalDate.now().format(formatter);

③ DateUtils 类:Apache Commons Lang 提供的日期工具类,可以方便地进行日期的转换和计算。例如,将字符串转换为 Date 对象:

Date date = DateUtils.parseDate("2023-05-29", "yyyy-MM-dd");

④ LocalDate 和 LocalTime 类:Java 8 引入的本地日期和时间类,用于处理日期和时间。例如,将字符串转换为 LocalDate 对象:

LocalDate date = LocalDate.parse("2023-05-29", DateTimeFormatter.ofPattern("yyyy-MM-dd"));

⑤ Instant 类:Java 8 引入的时间戳类,用于表示一个精确到纳秒的时间点。例如,将时间戳转换为 Date 对象:

Instant instant = Instant.ofEpochMilli(1622246400000L);
 Date date = Date.from(instant);

通过使用这些日期工具类,可以更加便捷地进行日期和字符串之间的相互转换。

四、总结自定义的日期工具类,实现代码模块化和复用

public class DateUtils {
    /** 时间格式(yyyy-MM-dd) */
    public final static String DATE_PATTERN = "yyyy-MM-dd";
    /** 时间格式(yyyy-MM-dd HH:mm:ss) */
    public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

    /**
     * 将 Date 对象按照默认的日期格式(yyyy-MM-dd)转换为字符串
     *
     * @param date 日期对象
     * @return 转换后的字符串
     */
    public static String format(Date date) {
        return format(date, DATE_PATTERN); // 调用重载方法
    }

    /**
     * 将 Date 对象按照指定的日期格式转换为字符串
     *
     * @param date    日期对象
     * @param pattern 日期格式
     * @return 转换后的字符串
     */
    public static String format(Date date, String pattern) {
        if (date != null) { // 判断日期对象是否为空
            SimpleDateFormat df = new SimpleDateFormat(pattern); // 创建日期格式化对象
            return df.format(date); // 格式化日期并返回字符串
        }
        return null; // 如果日期对象为空则返回 null
    }

    /**
     * 将字符串按照默认的日期格式(yyyy-MM-dd)转换为 Date 对象
     *
     * @param date 字符串格式的日期
     * @return 转换后的日期对象
     */
    public static Date parse(String date) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); // 创建日期格式化对象
        try {
            return format.parse(date); // 解析字符串并返回日期对象
        } catch (ParseException e) { // 处理解析异常
            e.printStackTrace();
        }
        return null; // 如果解析异常则返回 null
    }

    /**
     * 给日期对象添加指定的天数
     *
     * @param date 日期对象
     * @param day  要添加的天数
     * @return 添加指定天数后的日期对象
     */
    public static Date add(Date date, Integer day) {
        Calendar cld = Calendar.getInstance(); // 创建 Calendar 实例
        cld.setTime(date); // 将给定的日期对象设置为 Calendar 的时间
        cld.add(Calendar.DATE, day); // 在日期上添加指定的天数
        return cld.getTime(); // 返回添加后的日期对象
    }

    /**
     * 传入日期和天数来查询几天前的日期
     */
    public static Date getDateBefore(Date date,int day){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - day );
        return calendar.getTime();
    }
}

实例应用:

 

 五、Hutool 的日期工具类的一些常用方法

        Hutool是Java常用类库之一,其中封装了很多实用的工具类。其日期工具类提供了一些更方便、易用的方式去处理日期相关操作。

但记得要提前引入依赖:

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.10</version>
        </dependency>
DateUtil.parse():将字符串转换为日期类型。
Date date = DateUtil.parse("2023-05-29");
DateUtil.format():将日期类型转换为字符串。
String dateStr = DateUtil.format(DateUtil.date(), "yyyy-MM-dd HH:mm:ss");
DateUtil.date():获取当前时间的 Date 对象。
Date date = DateUtil.date();
DateUtil.offsetDay():获取指定日期偏移指定天数后的日期。
Date newDate = DateUtil.offsetDay(date, 1);
DateUtil.between():计算两个日期间隔的天数,小时数等。
long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);
DateUtil.isLeapYear():判断指定年份是否为闰年。
boolean isLeapYear = DateUtil.isLeapYear(2024);
DatePattern 类:Hutool 提供的日期格式枚举类,包含了常用的日期时间格式。
String dateStr = DateUtil.format(DateUtil.date(), DatePattern.NORM_DATETIME_PATTERN);
DateTime 类:Hutool 扩展的日期时间类,可以进行更方便的日期时间操作。
DateTime dateTime = DateTime.now();
int year = dateTime.year();
int month = dateTime.month();
int day = dateTime.dayOfMonth();
String week = dateTime.dayOfWeekName();
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;


public class DateDemo {
    public static void main(String[] args) {
        // 字符串转日期
        DateTime dateTime1 = DateUtil.parse("2023-05-29");
        System.out.println("dateTime1:" + dateTime1);

        // 日期转字符串
        String dateTimeStr = DateUtil.format(dateTime1, "yyyy-MM-dd HH:mm:ss");
        System.out.println("dateTimeStr:" + dateTimeStr);

        // 当前时间
        DateTime dateTime2 = DateUtil.date();
        System.out.println("当前时间:" + dateTime2);

        // 偏移一天后的日期
        DateTime dateTime3 = DateUtil.offsetDay(DateUtil.date(), 1);
        System.out.println("偏移一天后的日期:" + dateTime3);

        // 计算两个日期间隔的小时数
        long betweenHour = DateUtil.between(dateTime1, dateTime2, DateUnit.HOUR);
        System.out.println("间隔小时数:" + betweenHour);

        // 判断是否为闰年
        boolean isLeapYear = DateUtil.isLeapYear(dateTime1.year());
        System.out.println("是否为闰年:" + isLeapYear);

        // 使用 DatePattern 枚举类
        String dateStr = DateUtil.format(DateUtil.date(), DatePattern.NORM_DATETIME_PATTERN);
        System.out.println("使用 DatePattern 枚举类:" + dateStr);

        // 使用 DateTime 类
        DateTime dateTime4 = DateTime.now();
        int year = dateTime4.year();
        //获得月份,从0开始计数 要加一
        int month = dateTime4.month() + 1;
        int day = dateTime4.dayOfMonth();
        int week = dateTime4.dayOfWeek();
        System.out.printf("年:%d,月:%d,日:%d,星期:%s%n", year, month, day, week);
    }
}

以上就是 Hutool 的日期工具类的一些常用方法,其提供了更加方便、易用的方式去处理日期相关操作。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java日期日期字符串转化工具包可以帮助开发人员在日期日期字符串之间进行方便的换。在Java中,处理日期日期字符串转化是比较常见的任务,因此针对这一需求,开发人员可以借助于Java提供的日期相关类和方法进行转化操作。 在Java中,Date类和DateFormat类是处理日期日期字符串的关键类。我们可以使用SimpleDateFormat类来定义日期格式,并借助其提供的方法进行日期日期字符串相互转化。 要将日期转化日期字符串,我们可以使用SimpleDateFormat的format()方法。该方法接受一个Date对象作为参数,将日期转化为指定格式的字符串。例如,对于一个Date对象date,可以使用如下代码将其转化日期字符串: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String dateString = sdf.format(date); 要将日期字符串转化日期对象,我们可以使用SimpleDateFormat的parse()方法。该方法接受一个日期字符串作为参数,并返回相应的Date对象。例如,对于一个日期字符串dateString,可以使用如下代码将其转化日期对象: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(dateString); 需要注意的是,转化过程中要确保日期字符串的格式与SimpleDateFormat中定义的格式相匹配,否则会抛出ParseException异常。 除了SimpleDateFormat外,Java 8之后还引入了新的日期时间API,其中包含了更加简洁和易用的日期和时间处理方法。例如,可以使用LocalDate类和DateTimeFormatter类来进行日期日期字符串转化。 总而言之,Java日期日期字符串转化工具包可以借助Date类、SimpleDateFormat类以及Java 8新的日期时间API中的相关类和方法来实现。根据具体的需求和场景,选择合适的方法进行转化操作,可以提高代码的可读性和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值