Java基础之日期类

目录

第一代日期类:Date

第二代日期类:Calendar

第三代日期类

前面两代日期类的不足分析

第三代日期类常见方法


在Java中,日期类可以分为三种:Date、Calendar、 LocalDateTime

下面我将逐一介绍它们的用法与差异:

第一代日期类:Date

Date d1 = new Date();//创建一个Date
//1。创建SimpleDateFormat对象,可以指定相应的格式
//2.这里的格式使用的字母是规定好,不能乱写
SimpleDateFormat sdf = new SimpleDateFormat("yvvy年MM月dd日 hh:mm:ss E");
String format = sdf.format(d1); // format:将日期转换成指定格式的字符串
System.out.printLn("当前日期=" + format);

//1.可以把一个格式化的String转成对应的Date
//2.得到Date 仍然在输出时,还是按照国外的形式,如果希望指定格式输出,需要转换
//3.在把String -> Date ,使用的sdff格式需要和你给的String的格式一样,否则会抛出转换异常
String s= "1996年01月01日10:20:30星期一";
Date parse = sdf.parse(s);
System.out.printLn("parse=" + sdf.format(parse));

第二代日期类:Calendar

1)第二代日期类,主要就是 Calendar类(日历)。
public abstract class Calendar extends object implements Serializable,Cloneable,Comparable< Calendar>
2) Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
 

//1. Calendar是一个抽象类,并且构造器是private
//2。可以通过getInstance()来获取实例
//3.提供大量的方法和字段提供给程序员
//4.Calendar没有提供对应的格式化的类,因此需要程序员自己组合来输出
Calendar c = Calendar.getInstance();//创建日历类对象//比较简单,自由
System.out.println("c=" +c);
//2.获取日历对象的某个字历字段
System.out.println("年:" +c.get(Calendar. YEAR));
//这里为什么要+1,因为Calendar返回月时候,是按照0开始编号
System.out.println("月:" +(c.get(Calendar.MONTH) +1));
System.out.println("日:" +c.get(Calendar.DAY_OF_MONTH));
System.out.println("小时:" +c.get(Calendar. HOUR));
System.out.println("分钟:" +c.get(Calendar.MINUTE));
System.out.printLn("秒:" + c.get(Calendar. SECOND));

第三代日期类

前面两代日期类的不足分析


JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK1.1引入Calendar类之后被弃用了。而Calendar也存在问题是:
1)可变性:像日期和时间这样的类应该是不可变的。
2)偏移性:Date中的年份是从1900开始的,而月份都从0开始。

3)格式化:格式化只对Date有用,Calendar则不行。
4)此外,它们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)。

第三代日期类常见方法


1)LocalDate(日期/年月日)、LocalTime(时间/时分秒)、LocaIDateTime(日期时间)JDK8加入
LocalDate只包含日期,可以获取日期字段

LocaITime只包含时间,可以获取时间字段
LocalDateTime包含日期+时间,可以获取日期和时间字段

LocalDateTime Idt = LocalDateTime.now();//LocalDate.now();//LocalTime.now
System.out.println(ldt);
ldt.getYear();
ldt.getMonthValue();
ldt.getMonth();
ldt.getDayOfMonth();
ldt.getHour();
ldt.getMinute();
ldt.getSecond();

2) DateTimeFormatter格式日期类类似于SimpleDateFormat
DateTimeFormat dtf = DateTimeFormatter.ofPattern(格式);

String str = dtf.format(日期对象);

LocalDateTime ldt = LocalDateTime.now();
//关于DateTimeFormatter的各个格式参数,需要看jdk8的文档
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒");
String strDate = dtf.format(ldt);

3)第三代日期类更多方法
LocalDateTime类
MonthDay类:检查重复事件是否是闰年
增加日期的某个部分
使用plus方法测试增加时间的某个部分
使用minus方法测试查看一年前和一年后的日期

//提供 plus 和 minus方法可以对当前时间进行加或者减
//看看890天后,是什么时候 年月日-时分秒
LocalDateTime localDateTime = ldt.plusDays(890);
System.out.println("890天后=" + dateTimeFormatter.format(localDateTime));
//看看在3456分钟前是什么时候,年月日-时分秒输出
LocalDateTime localDateTime2 = ldt.minusMinutes(3456);
System.out.println("3456分钟前日期=" + dateTimeFormatter.format(localDateTime2))


 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值