Java获取N天前,N天后的日期(如3天)

2023-11-21 09:20
文章标签 java 获取 日期 天前 天后

本文主要是介绍Java获取N天前,N天后的日期(如3天),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一. JDK8之前 - Calendar
 
Jdk1.1 之后, 带来了java.util.Calendar工具类, 用于处理时间.

 

1.1 某(3)天前:取负值 

  Calendar calendar1 = Calendar.getInstance();SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");calendar1.add(Calendar.DATE, -3);String three_days_ago = sdf1.format(calendar1.getTime());System.out.println(three_days_ago);

1.2 同理,3天后,取正值即可:

  Calendar calendar2 = Calendar.getInstance();SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMdd");calendar2.add(Calendar.DATE, 3);String three_days_after = sdf2.format(calendar2.getTime());System.out.println(three_days_after);

二. JDK8的处理方式 - LocalDate(Time)
 

1. JDK8中时间处理类库
之前的时间处理方式繁冗拖沓, jdk8带来了全新的时间处理工具类,位于jdk包(java.time)之下.

常用的类有以下几个类。

2. 时间获取
使用不同的类可以获取不同精度的时间。

/*** 时间获取
*/
@Test
public void nowTimeTest() {// 当前精确时间LocalDateTime now = LocalDateTime.now();System.out.println("当前精确时间:" + now);System.out.println("当前精确时间:" + now.getYear() + "-" + now.getMonthValue() + "-" + now.getDayOfMonth() + " " + now.getHour() + "-" + now.getMinute() + "-" + now.getSecond());// 获取当前日期LocalDate localDate = LocalDate.now();System.out.println("当前日期:" + localDate);System.out.println("当前日期:" + localDate.getYear() + "-" + localDate.getMonthValue() + "-" + localDate.getDayOfMonth());// 获取当天时间LocalTime localTime = LocalTime.now();System.out.println("当天时间:" + localTime);System.out.println("当天时间:" + localTime.getHour() + ":" + localTime.getMinute() + ":" + localTime.getSecond());// 有时区的当前精确时间ZonedDateTime nowZone = LocalDateTime.now().atZone(ZoneId.systemDefault());System.out.println("当前精确时间(有时区):" + nowZone);System.out.println("当前精确时间(有时区):" + nowZone.getYear() + "-" + nowZone.getMonthValue() + "-" + nowZone.getDayOfMonth() + " " + nowZone.getHour() + "-" + nowZone.getMinute() + "-" + nowZone.getSecond());
} 


获取到的时间:

当前精确时间:2019-10-24T00:26:41.724
当前精确时间:2019-10-24 0-26-41
当前日期:2019-10-24
当前日期:2019-10-24
当前精确时间(有时区):2019-10-24T00:26:41.725+08:00[GMT+08:00]
当前精确时间(有时区):2019-10-24 0-26-41
当天时间:00:26:41.725
当天时间:0:26:41


3. 时间创建
可以指定年月日时分秒创建一个时间类,也可以使用字符串直接转换成时间。

/*** 时间创建*/
@Test
public void createTime() {LocalDateTime ofTime = LocalDateTime.of(2019, 10, 1, 8, 8, 8);System.out.println("当前精确时间:" + ofTime);LocalDate localDate = LocalDate.of(2019, 10, 01);System.out.println("当前日期:" + localDate);LocalTime localTime = LocalTime.of(12, 01, 01);System.out.println("当天时间:" + localTime);
}


创建的时间:

当前精确时间:2019-10-01T08:08:08
当前日期:2019-10-01
当天时间:12:01:01


4. 时间转换

/**
* 日期转换
*/
@Test
public void convertTimeTest() {LocalDateTime parseTime = LocalDateTime.parse("2019-10-01T22:22:22.222");System.out.println("字符串时间转换:" + parseTime);LocalDate formatted = LocalDate.parse("20190101", DateTimeFormatter.BASIC_ISO_DATE);System.out.println("字符串时间转换-指定格式:" + formatted);// Date 转换成 LocalDateTimeDate date = new Date();ZoneId zoneId = ZoneId.systemDefault();System.out.println("Date 转换成 LocalDateTime:" + LocalDateTime.ofInstant(date.toInstant(), zoneId));// LocalDateTime 转换成 DateLocalDateTime localDateTime = LocalDateTime.now();Date toDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());System.out.println("LocalDateTime 转换成 Date:" + toDate);\// 当前时间转时间戳long epochMilli = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();System.out.println("当前时间转时间戳:" + epochMilli);// 时间戳转换成时间LocalDateTime epochMilliTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault());System.out.println("时间戳转换成时间:" + epochMilliTime);
}


转换结果:

字符串时间转换:2019-10-01T22:22:22.222
字符串时间转换-指定格式:2019-01-01
Date 转换成 LocalDateTime:2019-10-24T00:46:41.251
LocalDateTime 转换成 Date:Thu Oct 24 00:46:41 GMT+08:00 2019
当前时间转时间戳:1571849201258
时间戳转换成时间:2019-10-24T00:46:41.258


5. 时间格式化

/*** 日期格式化*/
@Test
public void formatTest() {LocalDateTime now = LocalDateTime.now();System.out.println("当前时间:" + now);System.out.println("格式化后:" + now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));System.out.println("格式化后:" + now.format(DateTimeFormatter.ISO_LOCAL_DATE));System.out.println("格式化后:" + now.format(DateTimeFormatter.ISO_LOCAL_TIME));System.out.println("格式化后:" + now.format(DateTimeFormatter.ofPattern("YYYY-MM-dd hh:mm:ss")));
}


格式化后:

当前时间:2019-10-24T00:37:44.867
格式化后:2019-10-24T00:37:44.867
格式化后:2019-10-24
格式化后:00:37:44.867
格式化后:2019-10-24 12:37:44


6. 时间比较

/*** 时间比较*/
@Test
public void diffTest() {LocalDateTime now = LocalDateTime.now();LocalDateTime yestory = now.minusDays(1);System.out.println(now + "在" + yestory + "之后吗?" + now.isAfter(yestory));System.out.println(now + "在" + yestory + "之前吗?" + now.isBefore(yestory));// 时间差long day = yestory.until(now, ChronoUnit.DAYS);long month = yestory.until(now, ChronoUnit.MONTHS);long hours = yestory.until(now, ChronoUnit.HOURS);long minutes = yestory.until(now, ChronoUnit.MINUTES);System.out.println("相差月份" + month);System.out.println("相差天数" + day);System.out.println("相差小时" + hours);System.out.println("相差分钟" + minutes);// 距离JDK 14 发布还有多少天?LocalDate jdk14 = LocalDate.of(2020, 3, 17);LocalDate nowDate = LocalDate.now();System.out.println("距离JDK 14 发布还有:" + nowDate.until(jdk14, ChronoUnit.DAYS) + "天");
}


比较结果:

2019-10-24T00:39:01.589在2019-10-23T00:39:01.589之后吗?true
2019-10-24T00:39:01.589在2019-10-23T00:39:01.589之前吗?false
相差月份0
相差天数1
相差小时24
相差分钟1440
距离JDK 14 发布还有:145天


7. 时间加减

/*** 日期加减*/
@Test
public void calcTest() {LocalDateTime now = LocalDateTime.now();System.out.println("当前时间:"+now);LocalDateTime plusTime = now.plusMonths(1).plusDays(1).plusHours(1).plusMinutes(1).plusSeconds(1);System.out.println("增加1月1天1小时1分钟1秒时间后:" + plusTime);LocalDateTime minusTime = now.minusMonths(2);System.out.println("减少2个月时间后:" + minusTime);
}


操作结果:

当前时间:2019-10-24T00:41:08.877
增加1月1天1小时1分钟1秒时间后:2019-11-25T01:42:09.877
减少2个月时间后:2019-08-24T00:41:08.877   

 
8. 时间扩展方法

/*** 时间方法*/
@Test
public void timeFunctionTest() {LocalDateTime now = LocalDateTime.now();System.out.println("当前时间:" + now);// 第一天LocalDateTime firstDay = now.withDayOfMonth(1);System.out.println("本月第一天:" + firstDay);// 当天最后一秒LocalDateTime lastSecondOfDay = now.withHour(23).withMinute(59).withSecond(59);System.out.println("当天最后一秒:" + lastSecondOfDay);// 最后一天LocalDateTime lastDay = now.with(TemporalAdjusters.lastDayOfMonth());System.out.println("本月最后一天:" + lastDay);// 是否闰年System.out.println("今年是否闰年:" + Year.isLeap(now.getYear()));
}


输出结果:

当前时间:2019-10-24T00:43:28.296
本月第一天:2019-10-01T00:43:28.296
当天最后一秒:2019-10-24T23:59:59.296
本月最后一天:2019-10-31T00:43:28.296
今年是否闰年:false
Jdk1.8之后使用了新的时间处理工具包类, 用以替换之前的Calendar类, 并将时间处理相关工具类单独放到一个package中, 理解和使用更方便.
 

这篇关于Java获取N天前,N天后的日期(如3天)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/qq_35275233/article/details/106721138
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/401393

相关文章

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp