隐藏页面特效
2025-3-27 21:47:57

༺ཌ༈君☠纤༈ད༻の公告

由于时间有限,本博客将不定期更新。如果本博客对您有帮助,麻烦动动小手点个推荐&关注,如果能给个打赏就更好啦(打赏请备注哦≥^▽^≦)

Java高级编程--JDK8之前日期时间API

在开发过程中我们常常会碰到要处理时间的需求,本篇博客将介绍在JDK8之前日期时间API的使用。


目录:

☍ java.lang.System类

☍ java.util.Date类和子类java.sql.Date类

☍ SimpleDateFormat类

☍ Calendar日历类


▾ java.lang.System类

System类提供的public static long currentTimeMillis()用来返回当前时
间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。

☄ 此方法适于计算时间差(时间戳)。

计算世界时间的主要标准有:

  ☃ 此方法适于计算时间差(时间戳)。

  ☃ 此方法适于计算时间差(时间戳)。

  ☃ 此方法适于计算时间差(时间戳)。

Long thisTime = System.currentTimeMillis(); System.out.println(thisTime); //Thu Jun 11 08:53:39 CST 2020对应的时间差1591836819476

▾ java.util.Date类和子类java.sql.Date类

表示特定的瞬间,精确到毫秒

Date()构造器:

  ➣ Date():使用无参构造器创建的对象可以获取本地当前时间。

  ➣ Date(long millis):指定毫秒数(时间戳)的日期时间对象。

  ➣ Date(int year, int month, int day):指定年月日,year从1900年开始,月份从0开始,已过时。

Date类常用方法:

  ➣ getTime():返回自 1970年1月1日 00:00:00 GMT以来的时间戳,等同于System.currentTimeMillis()。

  ➣ toString():把此 Date 对象转换为默认格式的字符串如:Mon Jun 13 09:40:30 CST 2020。

/**java.util.Date的日期类*/ //空参为默认当前时间对象 Date date1 = new Date(); //date.toString()方法返回的是当前日期和时间信息 System.out.println("date1:" + date1.toString()); //Thu Jun 11 08:48:39 CST 2020 //时间戳/毫秒数 等同于System.currentTimeMillis() System.out.println("date1:" + date1.getTime()); //1591836915818 //Long l参数的构造器 指定时间戳(毫秒数)日期对象 Date date2 = new Date(1591836829476L); System.out.println("date2:" + date2.toString()); //Thu Jun 11 08:53:49 CST 2020

java.sql.Date类与java.util.Date类的转换:

由于java.sql.Date是java.util.Date的子类,所以这两个类的创建方式和大多数方法基本相同,需要注意sql.Date类无空参构造器,使用 new Date(Long millis)进行实例化操作

java.sql.Date类对应着数据库中的日期类型的变量,多在与数据库交互时使用,其格式与java.util.Date有所区别,格式如:2020-06-11

✥ sql.Date<-->util.Date的转换

   ➣ 向上转型(自动) java.util.Date date = new java.sql.Date(Long millis);

✥ util.Date-->sql.Date

   ➣ 通过时间戳/毫秒数转换 java.sql.Date date = new java.sql.Date(new java.util.Date().getTime());

错误方式:不能强制向下转型 报ClassCastException错误 java.sql.Date date = (java.util.Date) new java.util.Date();

/**sql.Date与util.Date的转换*/ //sql.Date转为util.Date //sql.Date-->sql.Date 自动向上转型 注意sql.Date的构造器必须有参数Long millis Date date5 = new java.sql.Date(1591836915818L); System.out.println("date5:" + date5); //util.Date-->sql.Date 不能强制向下转型 报ClassCastException错误 //java.sql.Date date6 = (java.sql.Date)date1; // System.out.println("date6:" + date6); //util.Date-->sql.Date 通过时间戳(毫秒数转换) java.sql.Date date7 = new java.sql.Date(new Date().getTime()); System.out.println("date7:" + date7);

▾ SimpleDateFormat类

Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat
类是一个不与语言环境有关的方式来格式化和解析Date日期的具体类。

SimpleDateFormat类的实例化操作:

  ➣ new SimpleDateFormat():使用无参构造器创建默认格式的SimpleDateFormat对象。

  ➣ new SimpleDateFormat(String pattern):使用String pattern构造器创建自定义格式的SimpleDateFormat对象。

SimpleDateFormat类的格式化和解析操作:

  ➣ public String format(Date date) :方法格式化时间对象date,返回字符串

  ➣ public String format(Date date) : public Date parse(String source):将字符串按SimpleDateFomat的格式转换为Date对象,返回Date类对象。

SimpleDateFormat类的格式化和解析操作:

字母 日期或时间元素 表示 示例
G Era年代标志符 Text 公元; AD
y Year 2020; 20
M 年中的月份 Month June; Jun; 06
w 年中的周数 Number 27
W 月份中的周数 Number 3
D 年中的天数 Number 169
d 月份中的天数 Number 14
F 月份中的星期 Number 3
E 星期的天数 Text TuseDay; Tue;星期四
a Am/Pm标记 Text PM; 下午
H 小时(0-23) Number 0
k 小时(1-24) Number 24
K 小时(0-11) Number 0
h 小时(1-12) Number 12
m 分钟 Number 30
s Number 59
S 毫秒(1秒=1000毫秒) Number 698
z 时区 General time zone PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
//空参实例化SimpleDateFormat SimpleDateFormat sdf = new SimpleDateFormat(); //格式化: 日期Date对象 ---> 字符串 Date date1 = new Date(); System.out.println(date1); //Fri Jun 12 16:45:34 CST 2020 String time1 = sdf.format(date1); System.out.println(time1); //20-6-12 下午4:45 //解析:格式化的逆过程 字符串 ---> 日期Date对象 默认方式如:20-6-12 下午4:45 String time2 = "20-11-12 下午4:45"; Date date2 = sdf.parse(time2); //Date date3 = sdf.parse("2020-06-12");// 传入的字符串格式与SimpleDateTime格式不同 ParseException异常 System.out.println(date2); //自定义实例化SimpleDateFormat SimpleDateFormat sdf1 = new SimpleDateFormat("G M yyyy-MM-dd M E a HH:mm:ss:SS z"); System.out.println(sdf1.format(date1)); //公元 6 2020-6-12 6 星期五 下午 17:37:21:548 CST //指定的什么格式,解析时传入的参数就需要是什么格式,否则会报ParseException异常 Date date3 = sdf1.parse("公元 6 2020-6-12 6 星期五 下午 17:37:21:548 CST"); System.out.println(date3);

▾ Calendar日历类

Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。

Calendar实例化操作:

  ➣ 使用Calendar.getInstance()方法(常用)。

  ➣ 调用它的子类GregorianCalendar的构造器。

Calendar类常用方法:

  ➣ public int get(int get filed):获取指定信息,如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY、MINUTE、SECOND。

  ➣ public void set(int field, int value):与get(xxx)对应,设置Calendar相应变量的值,如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY、MINUTE、SECOND。

  ➣ public void add(int field, int amount):将对应信息加值,负数为减值。

  ➣  public final Date getTime():将calendar对象转换为Date对象,返回Date对象。

  ➣ public long getTimeInMillis():将calendar对象转换为Long型毫秒数。

  ➣ public final void setTime(Date date):将calendar对象设置为对应的Date对象(对原对象的操作)。

  ➣ public void setTimeInMillis(long millis):将calendar对象设置为对应的毫秒数时间(对原对象的操作)。

✦ 获取月份时:一月是0,二月是1,以此类推,12月是11

✦ 获取星期时:周日是1,周二是2 ......周六是7

public void testCalendar(){ /*1、实例化Calendar abstract类 通过子类创建对象 方式一:创建子类(GregorianCalendar) 方式二:调用其静态方法getInstance() 常用 */ Calendar calendar = Calendar.getInstance(); System.out.println(calendar.getClass()); //也是通过子类GregorianCalendar实现 /*2、Calendar类常用方法 calendar.get(xxx) 获取常用信息,如年、月、日、周等 calendar.set(xxx,value) 与get()对应,设置信息 calendar.add(xxx,int value) 将对应信息加值,负数为减值 calendar.getTime() 将calendar对象转换为Date对象,返回Date calendar.getTimeMillis() 获取毫秒数,返回Long calendar.setTime(Date date) 将Date对象值设置到calendar对象中 calendar.setTimeInMillis(Long millis) 将毫秒数值设置到calendar对象中 */ //get(xxx) Calendar定义了很多static变量,如今天是这个月的第几天,年份,月等 // 通过get()可以获取到这些信息 System.out.println("--------get()------"); int month = calendar.get(Calendar.MONTH); System.out.println("Calendar.MONTH:"+month); //月份下标从0开始 System.out.println("Calendar.DAY_OF_MONTH:" + calendar.get(Calendar.DAY_OF_MONTH)); //set(xxx,value) 与get(xxx)对应,设置Calendar相应变量的值 System.out.println("---------set()---------"); calendar.set(Calendar.DAY_OF_WEEK,1); //注意:一周中的第几天从周日下标为1开始到周六为7结束 System.out.println("set(Calendar.DAY_OF_WEEK,1)后Calendar.DAY_OF_MONTH:" + calendar.get(Calendar.DAY_OF_MONTH)); //add() System.out.println("---------add()--------"); calendar.add(Calendar.DAY_OF_WEEK,6); System.out.println("在原来的基础上加6天:" + calendar.get(Calendar.DAY_OF_MONTH)); //周六 calendar.add(Calendar.YEAR,-1); //负数相当于减 System.out.println(calendar.get(Calendar.YEAR)); //2019 //getTime() Calendar类 --> Date类 System.out.println("--------getTime()--------"); Date date1 = calendar.getTime(); System.out.println(date1); //getTimeMillis() 获取毫秒数,相当于Date.getTime() 和 System.currentTimeMillis() System.out.println("--------getTimeMillis()--------"); Long millis = calendar.getTimeInMillis(); System.out.println(millis); //setTime(Date date) 与getTime()对应 Date--> Calendar类 System.out.println("--------setTime()--------"); Date date2 = new Date(); calendar.setTime(date2); System.out.println(calendar.get(Calendar.YEAR)); //2020 //setTimeInMillis(Long millis) System.out.println("--------setTimeInMillis()--------"); calendar.setTimeInMillis(millis); System.out.println("当前分钟:"+calendar.get(Calendar.MINUTE)); }

JDK8新增的日期时间API↷传送门


本博客与CSDN博客༺ཌ༈君☠纤༈ད༻同步发布

打赏

感谢您的支持,我会继续努力的!

扫码支持
请赏我点铜板买喵粮自己吃( •̀ ω •́ )y

打开支付宝扫一扫,即可进行扫码打赏哦


__EOF__

本文作者༺ཌ༈君☠纤༈ད༻
本文链接https://www.cnblogs.com/asio/p/13137026.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ༺ཌ༈君☠纤༈ད༻  阅读(453)  评论(0编辑  收藏  举报
编辑推荐:
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
欢迎阅读『Java高级编程--JDK8之前日期时间API』
点击右上角即可分享
微信分享提示