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

news2024/9/20 8:07:29

一、将日期格式化成字符串输出(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(); // 返回添加后的日期对象
    }
}

实例应用:

 

 

 

 五、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 的日期工具类的一些常用方法,其提供了更加方便、易用的方式去处理日期相关操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/583359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hadoop学习---11、HA高可用

1、Hadoop HA高可用 1.1 HA概述 1、所谓HA&#xff08;High Availablity&#xff09;&#xff0c;即高可用&#xff08;7 * 24小时不中断服务&#xff09;。 2、实现高可用最关键的策略是消除单点故障。HA严格来说应该分成各个组件的HA机制&#xff1a;HDFS的HA和YARN的HA。 …

数字化转型,低代码开发真的靠谱?

关于数字化转型&#xff0c;有这么一种定义&#xff0c;即利用数字化技术和能力来驱动企业商业模式创新和商业生态系统重构的一种途径与方法。通俗点说&#xff0c;数字化的核心和目的就是通过数字化技术&#xff0c;实现业务的转型、创新和增长&#xff0c;提供新的营收点与价…

超详细,性能测试三大模式详解,资深测试老鸟一文道破...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 在性能测试工作中…

IC芯片自动测试系统平台ATECLOUD:提高半导体制造效率与质量

近年来&#xff0c;随着半导体产业的快速发展&#xff0c;IC芯片在各种电子设备中扮演着越来越重要的角色。然而&#xff0c;为了满足不断增长的需求和保持竞争力&#xff0c;制造商需要不断提高生产效率并确保产品质量。ATECLOUD——一款基于云计算技术的IC芯片自动测试系统平…

租赁小程序|人车网租赁系统|电动车租赁系统包含哪些功能?

随着科技不断完善&#xff0c;租赁行业的发展也越来越好&#xff0c;电动车也开始进行线上推广租赁&#xff0c;不仅可以让人们更加方便的租用电动车&#xff0c;还让商家可以通过线上模式带动线下的经营&#xff0c;不同于传统的汽车租赁&#xff0c;用户只要打开手机就可以进…

MySQL-5.7.19版本安装详解

MySQL-5.7.19版本安装详解 1. 软件下载 Mysql5.7地址&#xff1a;https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip 2. 软件安装 2.1 第一步&#xff1a;解压 下载后会得到mysql-5.7.19-winx64的zip 安装文件&#xff0c;先将其解压解压的路径最好不…

微信小程序导入Vant Weapp ui组件库2023年最新版

微信小程序导入Vant Weapp ui组件库2023年最新版 写这篇文章的原因是Vant Weapp的官方文档快速上手是有一定的问题的&#xff0c;没错&#xff0c;我就是那个试错的人&#xff0c;弄了一下午才发现问题所在&#xff0c;所以写了一篇正确的导入教程。 第一步&#xff1a;在项目…

Python进阶 │反爬虫和怎样反反爬虫

爬虫、反爬虫和反反爬虫是网络爬虫工作过程中一直伴随的问题。 在现实生活中&#xff0c;网络爬虫的程序并不像之前介绍的爬取博客那么简单&#xff0c;运行效果不如意者十有八九。首先需要理解一下“反爬虫”这个概念&#xff0c;其实就是“反对爬虫”。根据网络上的定义&…

PowerShell:因为在此系统上禁止运行脚本,解决方法

运行powershell脚本遇见报错&#xff1a; 无法加载文件 C:\Users\DH\Desktop\cs\rename.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 查了查之后发现是在计算…

差动测试棒如何连接到示波器

差动测试棒提供一个安全的绝缘仪器给示波器使用&#xff0c;它可以转换由高输入的差动电压进入一个低电压并且显示波形在示波器上&#xff0c;使用频率高达100MHz&#xff0c;非常适合大电力测试、研发使用。 差动测试棒输出标是设计在操作示波器1MΩ的输入阻抗的相对衰减量&a…

人工智能学习07--pytorch20--目标检测:COCO数据集介绍+pycocotools简单使用

如&#xff1a;天空 coco包含pascal voc 的所有类别&#xff0c;并且对每个类别的标注目标个数也比pascal voc的多。 一般使用coco数据集预训练好的权重来迁移学习。 如果仅仅针对目标检测object80类而言&#xff0c;有些图片并没有标注信息&#xff0c;或者有错误标注信息。…

需求:js给html添加css

目前发送请求&#xff0c;请求回html&#xff1a;<div class"articleRecommendation_con"> <a href"https://weekly.caixin.com/2023-05-26/102059365.html"><img src"https://img.caixin.com/2023-05-27/168515251870385…

如何选择适合平台的直播美颜SDK:从技术和商业角度考虑

直播美颜SDK作为一种技术解决方案&#xff0c;可以帮助直播应用实现优秀的美颜效果&#xff0c;提高用户体验和粘性。然而&#xff0c;如何选择适合你应用的直播美颜SDK&#xff0c;需要从技术和商业角度综合考虑。本文将从这两个角度出发&#xff0c;为你介绍如何选择适合你应…

手把手带你读vue2文档(基础篇总结)

目录 声明式渲染 v-bind v-if条件与循环 name命名 学会log打印 一些js方法 双向绑定v-model和v-bind 那么请实现一个复选框吧 自定义标签模板 vue2实例 数据与方法 你提到vue有两种数据和方法&#xff0c;js是不是只有一种 vue2自带的实例和方法 vue2$会和jQuery冲…

四站精彩回顾 | Fortinet Accelerate 2023·中国区巡展火热进行中

Fortinet Accelerate 2023中国区巡展 上周&#xff0c;Fortinet Accelerate 2023中国区巡展分别走过青岛、南京、长沙、合肥四站&#xff0c;Fortinet携手太平洋电信、亚马逊云科技、中企通信等云、网、安合作伙伴&#xff0c;与各行业典型代表客户&#xff0c;就网安融合、网…

spring事务管理详解和实例(事务传播机制、事务隔离级别)

目录 1 理解spring事务 2 核心接口 2.1 事务管理器 2.1.1 JDBC事务 2.1.2 Hibernate事务 2.1.3 Java持久化API事务&#xff08;JPA&#xff09; 2.2 基本事务属性的定义 2.2.1 传播行为 2.2.2 隔离级别 2.2.3 只读 2.2.4 事务超时 2.2.5 回滚规则 2.3 事务状态 3…

盘点索引常见的11个知识点

今天来盘点一下关于MySQL索引常见的知识点 本来这篇文章我前两个星期就打算写了&#xff0c;提纲都列好了&#xff0c;但是后面我去追《漫长的季节》这部剧去了&#xff0c;这就花了一个周末的时间&#xff0c;再加上后面一些其它的事&#xff0c;导致没来得及写 不过不要紧&…

chatgpt赋能python:Python中0的输入方法:完整指南

Python中0的输入方法&#xff1a;完整指南 Python是一门强大的编程语言&#xff0c;广泛应用于数据分析、人工智能、网络应用等领域。在Python中&#xff0c;输入0有多种方法&#xff0c;因此本文将带您深入了解Python中0的输入方式&#xff0c;包括基础类型、字符串和列表等结…

【计算机网络】网络安全,HTTP协议,同源策略,cors,jsonp

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 网络安全非对称加密中间人攻击 HTTP协议同源策略corsjsonp 网络安全 非对称加密 会生成一个公…

Arm发布最新内核 : Corte-X4/A720/A520,支持Armv9.2

1、背景 Arm 是一家设计智能手机的CPU内核的公司&#xff0c;并且每年它都会进行新的迭代&#xff0c;这些迭代随后将集成进芯片SOC&#xff0c;例如当年的旗舰 Snapdragon 、 MediaTek Dimensity。2023年&#xff0c;发布了新的旗舰级内核&#xff1a; Cortex-X4 超大核、Cort…