三代日期类的基本使用

三代日期类的基本使用


一、第一代日期类Date

Date 日期类是在java.util 包中的。
Date日期类 调用它的无参构造器 返回当前系统的时间 如下:

Date date = new Date(); //返回当前系统的时间 具体格式 是国外的格式
System.out.println(date);//输出如下
Sun Jul 10 23:31:16 CST 2022

还有与Date类 配套使用的格式转换类 SimpleDateFormat类 该类可以格式化日期 转化成一个字符串的格式。 在指定格式时所使用的字母有具体的规定,可在JDK API 中查找,如图。

Date date = new Date(); //返回当前系统的时间 具体格式 时国外的格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 kk:mm:ss E");
String format = sdf.format(date); //将日期转换成指定格式的字符串
System.out.println(format);//输出如下
2022071023:35:33 星期日

在这里插入图片描述

在SimpleDateFormat类中 还提供了将字符串 转化为Date日期的方法

//SimpleDateformat 类中还有方法可以将一个字符串转化成一个Data日期
//当格式 必须是new SimpleDateformat 时的格式否则会由抛出转化异常
String s = "2000年12月29日 23:13:49 星期二"; //这里字符串的格式必须要是自己设定的格式
Date parse = sdf.parse(s); //这里会 产生ParseException的编译异常可以捕获 或是抛出异常
System.out.println(sdf.format(parse));//转化后的Data默认为的时间还是国外,可以进行格式化
//输入如下
2000122923:13:49 星期五

二、第二代的日期类Calendar

Calendar日期类时一个抽象类,它的构造器protected意味着我们不能通过 new 获得一个Calendar对象,所以我们想要获得一个Calendar具体如下:

 Calendar instance = Calendar.getInstance();//因为Calendar的构造器是protected 我们无法去new
                                  //获得对象 所以Calendar类中提供了方法 去获得它的一个实例
 System.out.println(instance);//输出发现并没有获得当前用户的时间 而是这个实例的引用.

Calenadar 通过特定的常量字段 来获取特定瞬间的时间.

//因为Calendar类中没有 格式化的类只有靠自身定义的常量字段 手动去格式化时间 比较的灵活
System.out.println(instance.get(Calendar.YEAR) + "年");
System.out.println(instance.get(Calendar.MONTH) + 1 + "月");//月份从0开始记数所以要加1
System.out.println(instance.get(Calendar.DAY_OF_MONTH) + "日");
System.out.println(instance.get(Calendar.HOUR_OF_DAY) + "时");
System.out.println(instance.get(Calendar.MINUTE) + "分");
System.out.println(instance.get(Calendar.SECOND) + "秒");
//输出如下
202271102542

具体格式标准可以通过字符串的拼接来表示.


二、第三代的日期类LocalDateTime

因为Date,Calendar日期类有着各种的不足,在 jdk8 加入了第三代日期类LocalDateTime
LocalDateTime类中的构造器是 private 意味着也无法通过new 获得日期对象,所以其提供了
now()方法 返回当前用户日期对象.

LocalDateTime now = LocalDateTime.now();//构造器为private 通过方法获得时间对象
System.out.println(now);//输出如下
2022-07-11T01:00:33.297

LocalDateTime有一个 配对的格式化类 DateTimeFormatter

 //第三代日期有格式化类DateTimeFormatter 通过方法返回格式化对象
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss E");
System.out.println(dtf.format(now));//格式化输出如下
2022-07-11 01:02:26 星期一

注意:格式化中字符串中的字符是规定的, 可在Jdk APi(1.8或以后的版本) 中的 DateTimeFormatter中查看。

LocalDateTime中也有方法 可以获得单个具体的时间

 //第三代日期类中可以通过getXxx()方法 获取具体的时间段
System.out.println(now.getYear());//年
System.out.println(now.getMonth());//月
System.out.println(now.getDayOfMonth());//日
System.out.println(now.getHour());//时
System.out.println(now.getMinute());//分
System.out.println(now.getSecond());//秒

在LocalDateTime中还可以 获取现在时间加上或减去一段时间后的时间

//LocalDateTime 通过plusXxx() 或是minusXxx() 
//以现在用户的时间 加上/减去 一段时间后的时间
System.out.println("30天后: " + dtf.format(now.plusDays(30)));//30天后
System.out.println("16月前: " + dtf.format(now.minusMonths(16)));// 16月前
//输出如下
30天后: 2022-08-10 01:11:15 星期三
16月前: 2021-03-11 01:11:15 星期四

第三代日期类中还有许多实用的方法,具体使用可自行探索.

总结

在Date 的大多数方法 在JDK1.1 引入后Calendar 就被弃用了其本身也存在在一些问题如线程不安全,没有格式化等。现如今Date也使用得很少,如需获取时间,最好使用第三代日期类LocalDateTime获取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值