时间原点概念
所有的数据类型,最后都需要以数字的形式表现出来,日期类型也不例外,换句话说,一个日期,比如2020年10月1日,在计算机里,就会用一个数字来代替–0
而这个0,所对应的日期为1970年1月1日8点0分0秒,在这一年,UNIX第一个版本刚刚被发布,所有的日期,都是以这个0为基准,每过一毫秒,就+1
Data类
java.util.date
(使用数据库访问时需要使用java.sql.Date)
创建时间类
Data now = new Data() //当前系统时间
Data zero = new Data(500) //在时间原点上+500ms
如果实例化Data类时,不加任何参数,会获取当前系统的时间,如果指定了参数,那么就会保存时间原点+参数毫秒的时间
可以直接使用toString方法获取当前Data保存的信息
也可以通过getTime()方法得到Data类保存的信息
System.out.printn("当前时间"+now.toString());
System.out.println("当前时间"+now.getTime());
这两种函数的区别在于toString更倾向于返回一个文本,所以获得的信息更便于阅读,比如
可能回返回 Web Jun 01 10:57:07 …
而getTime()则会返回一个long类型的整数,比如 1464749767875 这个数代表在时间原点上经过了多少ms,虽然对于计算机前的人来说并不是那么易于理解,但是对于计算机来说,要远比文本消息要容易理解的多
对于这两个函数,本质上得到的时间是一致的,但是由于机器性能的原因,可能会几十毫秒,并不会完全一样
SimpleDateFormat类(日期格式化)
java.text.SimpleDateFormat
使用时需要先创建一个SimpleDateFomat类的实例对象,该类的的构造函数接受一个str参数,在该参数中
y 代表年
M 代表月
d 代表日
H 代表24进制的小时
h 代表12进制的小时
m 代表分钟
s 代表秒
S 代表毫秒
这些特定字母中的每一个的位置代表了日期格式化后所对应的时间出现的位置,在该参数中出现的次数代表了日期格式化后其所对应的时间的位数
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
Data d = new Date();
String str = sdf.format(d);
System.out.println(str);
Calendar类
Calendar类即日历类,常用于进行“翻日历”,比如下个月的今天是多久
该类使用单例模式的设计模式,所以需要通过getInstance()方法来获取日历对象,你可以通过在setTime函数里一个传入Date类参数来设定他的时间
Calendar c = Calendar.getInstance();
Date d = c.getTime();
Date d2 = new Date(0);
c.setTime(d2); //把这个日历,调成日期 : 1970.1.1 08:00:00
当然,你同样也可以使用getTime()方法来以一个数字类型返回Calendar保存的日期
同时该类还有两个方法,add()与set()
add方法,在原日期上增加年/月/日 set方法,直接设置年/月/日
此处不作过多了解
LocalDate类
在阅读<Java核心技术 卷1>时,翻阅到
在Java8版本过后,Java中新添加了这么一个类–LocalDate类,在Java核心卷中与CSDN某博客上是这么写的
Date类对于处理人类记录日期的日历信息并不是很实用
Java8之前,Date类就以其糟糕的设计,被人吐槽,后来的Calendar依然栏,甚至烂出了境界,不值一提
由此可见,LocalDate很可能是Calendar的改善版本,Date类更擅长处理数字类日期数据,而Local更擅长处理人类纪录日期的日历信息,而且要比Calendar类更加的方便和高级
同样的,LocalDate类并不允许你调用他的构造器,而是需要使用静态工厂方法去返回一个他的实例
LocalDate.now();//当前时间
LocalDate.of(1999,12,31);//设定时间
然后,可以使用getYear(),getMouthValue,get…等方法返回它所记录的各种年月日信息
这里要特殊说明一个getDayOfWeek()方法,它可以得到当前日期是星期几,返回一个DayOfWeek类,你可以使用getValue方法来得到一个1-7之间的数
而对于类似Calendar类对日期进行加减的操作,则有