【愚公系列】2023年10月 Java教学课程 039-日期与时间

2024-02-27 07:30

本文主要是介绍【愚公系列】2023年10月 Java教学课程 039-日期与时间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏

文章目录

  • 🚀一、时间日期类
    • 🔎1.Date类
    • 🔎2.Date类常用方法
    • 🔎3.SimpleDateFormat类
    • 🔎4.Calendar类
    • 🔎5.秒杀案例
  • 🚀感谢:给读者的一封信


🚀一、时间日期类

🔎1.Date类

Java中的Date类是代表日期和时间的类,它提供了多种构造方法,可以使用系统当前时间创建对象,或者指定年月日时分秒来创建对象。常见的使用方式包括获取当前日期时间、格式化日期时间字符串、计算时间差等。

以下是一个示例:

import java.util.Date;
import java.text.SimpleDateFormat;public class DateDemo {public static void main(String[] args) {// 创建Date对象,使用当前系统时间Date now = new Date();System.out.println("当前时间:" + now);// 指定日期时间创建Date对象Date birthday = new Date(99, 7, 25, 0, 0, 0);System.out.println("出生日期:" + birthday);// 将日期格式化为字符串SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String nowStr = sdf.format(now);System.out.println("当前时间字符串:" + nowStr);// 计算时间差long diff = now.getTime() - birthday.getTime();long days = diff / (1000 * 60 * 60 * 24);System.out.println("出生至今已经过了:" + days + "天");}
}

输出:

当前时间:Tue Jun 08 22:46:22 CST 2021
出生日期:Fri Aug 27 00:00:00 CST 1999
当前时间字符串:2021-06-08 22:46:22
出生至今已经过了:8028天

🔎2.Date类常用方法

Java中的Date类提供了许多常用的方法,以下是一些常用的方法:

  1. getTime():返回自1970年1月1日00:00:00 GMT以来的毫秒数。
  2. setTime(long time):设置时间,参数为自1970年1月1日00:00:00 GMT以来的毫秒数。
  3. toString():将日期对象转换为字符串。
  4. before(Date when):判断当前日期是否在给定日期之前。
  5. after(Date when):判断当前日期是否在给定日期之后。
  6. compareTo(Date anotherDate):比较两个日期的先后顺序,如果当前日期在参数日期之前,则返回负数,如果相等,则返回0,否则返回正数。
  7. equals(Object obj):判断当前日期是否和参数日期相等。
  8. getYear():返回当前日期的年份。
  9. getMonth():返回当前日期的月份,范围从0到11。
  10. getDate():返回当前日期的天数。
  11. getDay():返回当前日期是星期几,范围为0到6,其中0表示星期日。
  12. getHours():返回当前日期的小时数,范围为0到23。
  13. getMinutes():返回当前日期的分钟数,范围为0到59。
  14. getSeconds():返回当前日期的秒数,范围为0到59。
  15. setTimeInMillis(long millis):设置时间,参数为自1970年1月1日00:00:00 GMT以来的毫秒数。

这些方法可以帮助我们在编写程序时对日期和时间进行处理和比较。

🔎3.SimpleDateFormat类

SimpleDateFormat是Java中一个用于格式化日期的类。它可以将一个日期对象按照指定的格式转换成一个字符串,也可以将一个字符串解析成一个日期对象。

下面是一个使用SimpleDateFormat类的例子,将日期转换成指定格式的字符串:

import java.text.SimpleDateFormat;
import java.util.Date;public class DateFormatExample {public static void main(String[] args) {Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String formattedDate = sdf.format(date);System.out.println(formattedDate);}
}

这个例子中,我们首先创建一个Date对象来表示当前时间。然后创建一个SimpleDateFormat对象,指定了日期格式为"yyyy-MM-dd HH:mm:ss"。最后调用SimpleDateFormat对象的format()方法将日期对象格式化成字符串,并将结果打印出来。

输出结果如下:

2021-06-21 13:30:45

除了将日期格式化成字符串外,SimpleDateFormat还可以将字符串解析成一个日期对象。例如:

import java.text.SimpleDateFormat;
import java.util.Date;public class DateFormatExample {public static void main(String[] args) {String dateString = "2021-06-21 13:30:45";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {Date date = sdf.parse(dateString);System.out.println(date);} catch (ParseException e) {e.printStackTrace();}}
}

这个例子中,我们首先创建一个包含日期字符串的字符串对象。然后创建一个SimpleDateFormat对象,并指定日期格式为"yyyy-MM-dd HH:mm:ss"。最后调用SimpleDateFormat对象的parse()方法将字符串解析成一个Date对象,并将结果打印出来。

输出结果如下:

Mon Jun 21 13:30:45 CST 2021

需要注意的是,在解析日期字符串时,可能会抛出ParseException异常,因此需要进行异常处理。

🔎4.Calendar类

Java中的Calendar类是用于处理日期和时间的类。它提供了一组方法来处理年、月、日、小时、分钟、秒等,可以进行日期和时间的加减运算,以及比较不同日期、时间之间的大小关系。

Calendar类是一个抽象类,不能直接实例化,必须通过它的一个子类实现。Java提供了三个子类:GregorianCalendar、JapaneseCalendar和BuddhistCalendar。其中GregorianCalendar是最常用的。

使用Calendar类可以获得当前的日期和时间,如下所示:

Calendar calendar = Calendar.getInstance(); // 获得当前时间
Date date = calendar.getTime(); // 获得当前日期时间

也可以设置日期和时间,如下所示:

calendar.set(Calendar.YEAR, year); // 设置年份
calendar.set(Calendar.MONTH, month); // 设置月份
calendar.set(Calendar.DAY_OF_MONTH, day); // 设置日期
calendar.set(Calendar.HOUR_OF_DAY, hour); // 设置小时
calendar.set(Calendar.MINUTE, minute); // 设置分钟
calendar.set(Calendar.SECOND, second); // 设置秒钟

Calendar类还可以进行日期和时间的计算,如下所示:

calendar.add(Calendar.YEAR, 1); // 增加一年
calendar.add(Calendar.MONTH, 1); // 增加一个月
calendar.add(Calendar.DAY_OF_MONTH, 1); // 增加一天
calendar.add(Calendar.HOUR_OF_DAY, 1); // 增加一小时
calendar.add(Calendar.MINUTE, 1); // 增加一分钟
calendar.add(Calendar.SECOND, 1); // 增加一秒钟

最后需要注意的是,Calendar类中的月份是从0开始的,即0代表一月,11代表十二月。

🔎5.秒杀案例

  • 需求

    秒杀开始时间是2020年11月11日 00:00:00,结束时间是2020年11月11日 00:10:00,用户小贾下单时间是2020年11月11日 00:03:47,用户小皮下单时间是2020年11月11日 00:10:11,判断用户有没有成功参与秒杀活动

  • 实现步骤

    1. 判断下单时间是否在开始到结束的范围内
    2. 把字符串形式的时间变成毫秒值
  • 代码实现

    public class DateDemo5 {public static void main(String[] args) throws ParseException {//开始时间:2020年11月11日 0:0:0//结束时间:2020年11月11日 0:10:0//小贾2020年11月11日 0:03:47//小皮2020年11月11日 0:10:11//1.判断两位同学的下单时间是否在范围之内就可以了。//2.要把每一个时间都换算成毫秒值。String start = "2020年11月11日 0:0:0";String end = "2020年11月11日 0:10:0";String jia = "2020年11月11日 0:03:47";String pi = "2020年11月11日 0:10:11";SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");long startTime = sdf.parse(start).getTime();long endTime = sdf.parse(end).getTime();//        System.out.println(startTime);
    //        System.out.println(endTime);long jiaTime = sdf.parse(jia).getTime();long piTime = sdf.parse(pi).getTime();if(jiaTime >= startTime && jiaTime <= endTime){System.out.println("小贾同学参加上了秒杀活动");}else{System.out.println("小贾同学没有参加上秒杀活动");}System.out.println("------------------------");if(piTime >= startTime && piTime <= endTime){System.out.println("小皮同学参加上了秒杀活动");}else{System.out.println("小皮同学没有参加上秒杀活动");}}}
    

🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

在这里插入图片描述

再次感谢您的阅读和支持!

最诚挚的问候, “愚公搬代码”

这篇关于【愚公系列】2023年10月 Java教学课程 039-日期与时间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/751645

相关文章

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@