目录

一、JDK 8之前日期类

1.1 java.lang.System类

1.2  java.util.Date类

1.3 java.sql.Date类

​编辑

1.4 java.text.SimpleDateFormat类

​编辑

1.5 Calendar类

1.实例化

2. 其他常用方法

二、JDK 8的日期类

2.1  LocalDate类、LocalTime类、LocalDateTime类(常用)

1. 实例化

2. 其他常用方法

2.2 Instant类

1.实例化

2. 其他常用方法

2.3 DateTimeFormatter类(相当于SimpleDateFormat)


前言

Date类有些过时了,因为Date类的格式是这样的 “Sat Feb 04 17:11:30 CST 2023”,太难看了,不利于国际上的统一。

于是有了SimpleDateFormat类,专门用来把Date的丑格式,改成自定义的漂亮格式,常用的格式便是“yyyy-MM-dd hh:mm:ss”这样的。

Calendar类用来替代Date类(因为Date类过时嘛),但是Calendar的缺点是不能自定义格式,因为SimpleDateFormat只能规范Date类的格式。

JDK 8后出现了LocalDateTime类取代Date类,DateTimeFormatter类去取代SimpleDateFormat类,同样DateTimeFormatter类是为LocalDateTime类自定义格式用的。

一、JDK 8之前日期类

1.1 java.lang.System类

常用的是System类中的静态方法currentTimeMillis(),返回的是从1970年1月1日0时0分0秒到现在的时间,以毫秒为单位,long型数据。常用来计算时间差,或者某段代码的执行时间

在项目中可用于生成唯一的名称(比如生成唯一的订单号,Triton项目当时生成的唯一jpg名称),如果每毫秒有多个产出,那还需要搭配随机数一起使之唯一化。

1.2  java.util.Date类

PS:还有一个Date类,是java.sql.Date类,是其子类

java.util.Date

        |------java.sql.Date

记忆点

(1)还能用(不算过时)两个构造器

(2)还能用(不算过时)的两个方法

(3)过时

偏移性:Date中的年份从1900开始,月份从0开始。如果我们要新建一个2020年9月8日的Date类对象,要减去偏移量,所以这种构造方式过时了没人用!

(3)Date类的API由于不易于国际化,已经过时了,它的很多方法都加了“Deprecated”注解。推荐使用Calendar类。

1.3 java.sql.Date类

记忆点

(1)实例化

(2)如何将java.util.Date类转化为java.sql.Date类

java.sql.Date类对应着sql数据库中date类型的变量

也就是说,如果我们要和sql进行交互,应该用java.sql.Date这个类去接收。

(1)如何实例化

(2)如何将java.util.Date类转化为java.sql.Date类——运用的是二者方法上的逻辑关系

1.4 java.text.SimpleDateFormat类

由于Date类不易于国际化,SimpleDateFormat便是对Date类的格式化和解析。

记忆点

(1)实例化

(2)两个常用方法

①格式化format(): 日期Date类------>字符串

②解析(格式化的逆过程)parse():字符串------>日期Date类

(3)异常

用到parse()的方法需要抛出ParseException,当输入的字符串与pattern不匹配就会报这个异常。

由于默认构造器解析出来的格式不顺眼很别扭,我们一般使用有参构造器指定格式进行开发:

  • y:年
  • M:大写的M代表月份(为了和minutes区分开)
  • d 天
  • h 小时
  • m 分钟
  • s秒

在项目开发中,我们一般使用“yyyy-MM-dd hh:mm:ss”这种格式

还可以任意指定其他格式:

1.5 Calendar类

记忆点:

(1)实例化

① 对象上转型。new一个子类对象GregorianCalendar

② 利用Calender类的startic方法getInstance(一般用这个)。

(2)其他常用方法

(3)一月是0,二月才是1;周日是1,周一是2,周六是7

1.实例化

因为Calendar是一个abstract方法,所以本身不能实例化。 实例化的方法有两个

① 对象上转型。new一个子类对象GregorianCalendar

② 利用Calender类的startic方法getInstance(一般用这个)。

2. 其他常用方法

(1)get( )

Calendar类里有很多static final修饰的变量。可以使用类名直接调用这些静态变量,比如Calendar.DAY_OF_WEEK,作为get等方法的参数,获取“今天是一年的第几天”,“一周的第几天”,“一月的第几天”等信息。这些变量并不存储“一年的第几天”等信息,他们只是一个名字或者标志而已。

(2)set( )

不要理解成“把今天改成今年的第1天”,这样很奇怪,因为今天明明是今年的第201天呀。
要理解成吧cal这个对象改成今年的第1天。用途:比如说题目指定了计算2022年1月1日,但是我们实例化的calendar对象却是今天,就可以用set把它改掉。

(3)add( )

        cal.add(Calendar.DAY_OF_YEAR,30);  //cal往后加30天System.out.println(cal.get(Calendar.DAY_OF_YEAR));System.out.println(cal.get(Calendar.YEAR));  //输出2022年cal.add(Calendar.MONTH,18);  //往后加18个月,12个月多出来的加到下一年System.out.println(cal.get(Calendar.MONTH));System.out.println(cal.get(Calendar.YEAR));  //输出2023年

calendar并没有minus方法,如果要往前推多少天或者多少月,把数值改成负数就行了。

(4)getTime( ) :calendar类------>Date类

用一个例子来理解其应用:把2021年9月28号打印成yyyy-MM-dd格式输出。思路是“先实例化calendar对象,用YEAR,MONTH,DATE指定月日年,然后Calendar对象--->Date类对象--->SimpleDateFormat类对象”。

        cal.set(Calendar.YEAR,2021);cal.set(Calendar.MONTH,8);  //注意,Month=实际月份-1cal.set(Calendar.DATE,28);Date date = cal.getTime();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");System.out.println(sdf.format(date));

(5)setTime( ) :Date类------>calendar类

        Calendar cal = Calendar.getInstance();Date date = new Date();cal.setTime(date);

二、JDK 8的日期类

JDK 8之前存在的问题:

(1)可变性:像日期和时间这样的类应该和string一样是不可变的,或者说一旦发生变化就得重新构造一个对象,但是上面Calendar类中我们可以用set方法对对象本身进行改变。

(2)格式化:虽然Date过时了推荐用Calendar,但是SimpleDateFormat只能对Date进行格式化,不能对Calendar格式化。

(3)偏移性:Date中的年份从1900开始,月份从0开始。如果我们要新建一个2020年9月8日的Date类对象,要减去偏移量

(4)缺少synchronize方法,不是线程安全的

(5)不能处理润秒

使用JDK 7时,已经有人感觉java自带的日期类使用起来有很多弊端,所以自己写了Joda-Time这个jar包(可以通过maven导入),后来Sun公司认为Joda-Time确实不错,直接把这个jar包的API写入到JDK 8中。

PS:如果公司用的还是JDK 7,又想使用JDK 8中新的类,可以通过maven导入Joda-Time这个jar包。

2.1  LocalDate类、LocalTime类、LocalDateTime类(常用)

1. 实例化

和Calendar实例化调用getInstance()方法一样,这3个类的实例化也不是直接调用构造器,而是调用和getInstance()一样的静态方法。

(1)now()方法:当前时间实例化

(2)of()方法:自定义时间实例化

不再具有偏移性,实例化的时候就写真实的年月日。

2. 其他常用方法

(1)getXxx()获取年、月、日、时、分、秒

以LocalDateTime类的对象为例

 (2)withXxx()设置 年、月、日、时、分、秒

具有不可变性!

(3)plusXxx()增加

具有不可变性!

(4)minus() 减少

和Calendar用负数不同,JDK 8的类有专门用于减的方法

2.2 Instant类

记录从1970年1月1日0时0分0秒到到现在的毫秒数

1.实例化

(1)now()

(2)ofEpochMillis()方法

2. 其他常用方法

(1)atOffset()

(2)toEpochMilli()函数

获取从1970年到现在的毫秒数,与Date类的getTime方法一样。

2.3 DateTimeFormatter类(相当于SimpleDateFormat)

记忆点

1. 实例化 ofPattern("")

2. 两个常用方法

①格式化format(): 日期LocalDateTime/LocalDate/LocalTime类------>字符串

②解析(格式化的逆过程)parse():字符串------>日期类

3. 不用抛异常

javaSE常用类(二)—— 日期类相关推荐

  1. 常用类 (二) ----- Math类

    相关文章: <常用类 (一) ----- Arrays数组工具类> <常用类 (二) ----- Math类> <常用类 (三) ----- BigDecimal和Big ...

  2. 王道论坛计算机考研机试指南怎么样,王道论坛计算机考研机试指南 二 日期类问题...

    二日期类问题 例2.3 日期差值 (九度教程第6题) 时间限制:1秒 **内存限制:32兆 ** 特殊判题:否 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数 ...

  3. Java实用类,包装类,日历类,日期类等工具类常用方法

    文章目录 第二章-实用类 1.枚举类型 2.包装类 3.包装类的常用方法 4.包装类的自动装箱和拆箱 5.String类 6.StringBuffer对象 String,StringBuffer,St ...

  4. 小汤学编程之JAVA基础day10——常用类(二):String常用方法、正则、StringBuffer和StringBuilder、Math和Random类、日期类和数字类

    一.String常用方法 二.正则表达式 1.基本     2.常用     3.高级 三.StringBuilder和StringBuffer类 1.区别     2.常用方法     3.继承结构 ...

  5. Java中的Math类和日期类详解

    Math类是定义了一系列的数学运算方法,是使用static修饰的方法,表示可以通过Math类直接访问.我们在开发中一般只需要关注两个: ·四舍五入: ·取得随机数 四舍五入 API文档中描述: rou ...

  6. 【Java】Object类、Objects类和日期类

    1 Object类 Object类是所有类的父类,每个类都直接或间接的继承自该类 1.1 Object.toString() 作用:打印输出类信息 重写前:打印输出包名类名@地址值 重写后:打印输出属 ...

  7. java 时间类 joda_Java日期类Joda-time的使用及性能对比

    在产品的性能优化过程中发现JDK的日期类Calendar使用起来太慢,于是找了替代方案,惊喜的发现Joda-time类库,提供的API功能丰富,关键的是性能要比JDK的Calendar要高出许多. 1 ...

  8. js中字符串类转为日期类,并比较

    var curTime = new Date();console.log("%o",curTime);//把字符串格式转化为日期类var starttime = new Date( ...

  9. 友元类实例:日期类 学生类

    1.定义Date类 : Date类中定义了三个私有数据成员(year ,month,day) 2.定义Student类: 在Student类中定义了两个私有数据成员(name[] ,birthday) ...

  10. JavaSE——常用类库(String类)

    第1节 常用类库--String 因为String相对之前的类来说更加常用一些,所以对字符串类进行专门的整理. 1. 概述 String类表示字符串,Java中的所有字符串文字都实现为此类的实例. 字 ...

最新文章

  1. RDKit | 基于支持向量机(SVM)的二分类活性预测模型
  2. CacheDependency缓存依赖里面的 absoluteExpiration(绝对到期时间),弹性到期时间(slidingExpiration)...
  3. matlab/simulink PMSM电机DTC控制
  4. js 字符和html和数值拼接,js中substring和substr的用法(获取字符串为整个html页面中的某个数值)...
  5. java1002java,疯狂java学习笔记1002---抽象类及接口
  6. Boost:bind绑定和数据成员以及高级用途的测试程序
  7. miniui列表下拉允许编辑且保存_在职必备,下拉列表|Excel
  8. 腾讯光子《黎明觉醒》技术美术负责人:如何制作超真实的开放世界?
  9. 我的地盘我做主——你必须遵守的Python编码规范
  10. ArrayBlockingQueue原理分析
  11. android q测试机型,小米9安卓Q系统刷机包开启测试 小米Android Q适配机型一览
  12. C#获取电脑IP、MAC地址示例代码
  13. sql server的密码采用自带什么密码技术存储_【技术分享】浅谈MYSQL 8.0新特性
  14. Xamarin.Forms 简介
  15. ORACLE中的自治事务
  16. 实验3.2 定义一个简单的Computer类
  17. “没有足够的可用内存来运行此程序”怎么解决
  18. 计算机鼠标老跳动,电脑鼠标总跳是怎么回事?
  19. 蒲公英智能云数据管理|蒲公英智能云|TARA
  20. laravel发送邮件

热门文章

  1. 工业机器人测试认证标准
  2. 银行业内部众测的正确打开姿势
  3. 【16人抢答器程序】
  4. deepin linux桌面环境,如何在Ubuntu上安装Deepin桌面环境
  5. 有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。
  6. python3.9安装Django
  7. android 百度周边雷达,android 百度地图SDK 3.7.0 周边雷达-Radar 周边搜索-PoiSearch
  8. TIZEN 系统的演化
  9. 2020年中国热交换器行业分类、发展历程、现状及主要生产厂商分析「图」
  10. 使用邮件发送自定义报表