一.获取日期时间(java8以前)
1.基础知识
1秒=1000毫秒
毫秒值的作用:计算2001,01,03-2007,08,11一个有多少天
获取毫秒值(获取当前时间到1970,1,1,00:00的毫秒值)
public static void main(String [] args)
{
System.out.println(System.currentTimeMillis());//获取毫秒值
}
2.java.util.Date包下Date类
常用方法:
Date data1=new Date();//返回当前日期时间
Date date2=new Date(0l);//参数是毫秒值,跟毫秒值得到日期
long time =data1.getTime();//根据日期得到毫秒值
二.日期时间格式化
new Date () 格式通常不是我们想要的
1.java.text.DateFormat包下DateFormat类
DateFormat类是日期时间格式化子类的抽象类继承Format
子类:SimpleDateFormat类
作用:格式化(Date->String),解析(String->Date)
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年mm月dd日 hh时mm分ss秒");
Date date1=new Date();
//格式化
String date2=sdf.format(date1);
//解析
Date d2=sdf.parse("2022年02月17日 08时02分30秒");//parse()方法会抛出parseException异常(参数格式和创建SimpleDateFormat格式不一样则抛出此异常
日历类
Java.util.Calendar包下Calendar类
Calendar类是抽象类
Calendar c= Calendar.getInstance();//Calendar是抽象类,不能直接创建,(多态原理)
int year =c.get(Calendar.YEAR);//获取日历字段具体值
c.set(Calendar.MONTH,1);//设置单个日历字段值
c.set(2001,10,1);//同时设置年月日
c.add(Calendar.DATE,8);//增加或减少字段值(正数增加,负数减少)
Date date1=c.getTime();//转换成Date对象
…
以上都是java8之前的类,Java8之后提供了新的类:LocalTime,LocalDateTime,LocaDate,位于java.time包下
注意SimpleDateFormat是线程不安全的,java8新增的3个类是线程安全的
日期类
java.time包下
Java8的日期时间类
已经有了Date包为什们还要使用java8的time包呢?
- java.util.Date和java.util.Calend类是线程不安全的,在实际开发过程中可能会需要保证这个日期是线程安全的
- java.time包是线程安全的,不需要对日期时间做额外的操作
- 老版本的日期时间类
对时间的计算是比较复杂
的,例如:现在据某个日期(1995年12月5号)过了多少天
老板版代码
//获取当前时间
Date date=new Date();
//当前时间据1970年1月1日过了多少毫秒
long s=date.getTime();
//1995年12月5号据1970年1月1日过了多少毫秒
Calendar c=Calendar.getInstance();
c.set(1995,12,5);
Date rdate=c.getTime();
long s2=rdate.getTime();
//s-s2然后将结果从毫秒换算成天
(s-s2)/1000/60/60/24;
新版本代码
long dav=ChronoUnit.DAYS.between(LocalDate.of(),LocalDate.now());