J a v a 中的日期与时间 \huge{Java中的日期与时间} Java中的日期与时间
J a v a Java Java中有很多类是专门用于描述日期类的。
Date类
D a t e Date Date类:用于表示当前所在系统的日期时间信息。
Date类的构造器
示例:
Date d = new Date();
System.out.println(d);
上述代码的结果为:
打印出来的是当前系统的时间,并且是格式化好的(非常的友好),也就说明new
一个Date
类,它里面存储的就是当前系统的时间。
常用的API:getTime()
g
e
t
T
i
m
e
(
)
getTime()
getTime():返回从
1970.01.01
00
:
00
:
00
1970.01.01 \space 00:00:00
1970.01.01 00:00:00到现在系统时间所对应的毫秒数。
示例:
long time = d.getTime();
System.out.println(time);
//System类中也有currentTimeMillis()方法
//可以起到相同的作用
long time1 = System.currentTimeMillis();
System.out.println(time1);
运行结果:
非常的难看(谁会闲着没事看时间毫秒数)
就像上面说的那样,单独看时间毫秒值真的非常的难看,但是将时间毫秒值结合两个方法在一起,就非常的有用啦,看下面:
一个构造方法一个
D
a
t
e
Date
Date类自带的方法可以将时间毫秒值转换为存储相应时间的
D
a
t
e
Date
Date类,这就很有用了。比方说计算一个日期经过多长时间到了那个日期,就可以首先统一转换为时间毫秒值,然后相加,在将最后的加和转换为相应的
D
a
t
e
Date
Date类打印即可。给一个应用场景:
就按照上面那个思路来:
//1. 得到当前的时间
Date d1 = new Date();
//2. 得到当前时间的时间毫秒值
long time = d1.getTime();
//3. 当前的时间 + 转换的时间 = 转换后时间 均已时间毫秒值描述
time += (60 * 60 + 121) * 1000;
//4. 结合转换后的时间生成转换后的Date类
Date d2 = new Date(time)
//5. 打印
System.out.println(d2)
完美解决!!!! ✔ \red{✔} ✔
Date类小总结
D a t e Date Date类对象生成的时候存储的就是当前的系统时间,打印就是格式化打印(友好), g e t T i m e ( ) getTime() getTime()方法获得时间毫秒值,可以进行时间转换计算, s e t T i m e ( ) setTime() setTime()方法可以利用时间毫秒值来为 D a t e Date Date对象进行改值,并且 D a t e Date Date类对象的构造方法支持传入时间毫秒值进行构造。
SimpleDateFormat类
S
i
m
p
l
e
D
a
t
e
F
o
r
m
a
t
SimpleDateFormat
SimpleDateFormat类就是用来格式化日期形式的,比方说:
这个形式不太方便让人读(个人感觉已经很好读了),或者下面这个:
这个更是重量级,只是针对于时间信息来讲毫无可读性,再看看这个:
看那哪里舒服,那么这里:
这个之间转换过程就需要
S
i
m
p
l
e
D
a
t
e
F
o
r
m
a
t
SimpleDateFormat
SimpleDateFormat类来进行操作。
再次介绍一下
S
i
m
p
l
e
D
a
t
e
F
o
r
m
a
t
SimpleDateFormat
SimpleDateFormat类就是代表着简单日期的格式化,可以用来把日期格式化为你自己想要的形式。
构造器与构造方法
示例:
//1. 定义Date类获取当前系统的时间信息
Date d = new Date();
//2. 定义日期格式化类(为什么后面的格式化这样写呢,下面有格式化规则)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");
//3. 开始进行格式化
String rs = sdf.format(d);
//4. 打印即可,现在rs中存储的就是格式化之后的结果
System.out.println(rs);
运行结果:
上面写了
f
o
r
m
a
t
format
format方法也可以格式化时间毫秒值。
示例:
//格式化一下当前时间过去121秒之后的时间
long time = System.currentTimeMillis() + 121 * 1000;
String rs2 = sdf.format(time);
System.out.println(rs2);
格式化形式对应表:
❗另外EEE
代表当前是周几,a
代表当前是上午还是下午。
parse()
给定一个应用场景:
在购买车票的时候,用户所能做的就是输入自己的信息,而且这个信息是以字符串形式输入的,那么可不可以直接将字符串类型的数据转换为
D
a
t
e
Date
Date类型呢?
可以的,就是
p
a
r
s
e
(
)
parse()
parse()这个方法。
示例:
public class SimpleDateFormatDemo2 {
public static void main(String[] args) throws ParseException {
// 目标: 学会使用SimpleDateFormat解析字符串时间成为日期对象。
// 有一个时间 2021年08月06日 11:11:11 往后 2天 14小时 49分 06秒后的时间是多少。
// 1、把字符串时间拿到程序中来
String dateStr = "2021年08月06日 11:11:11";
// 2、把字符串时间解析成日期对象(本节的重点):形式必须与被解析时间的形式完全一样,否则运行时解析报错!
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d = sdf.parse(dateStr);
// 3、往后走2天 14小时 49分 06秒
long time = d.getTime() + (2L*24*60*60 + 14*60*60 + 49*60 + 6) * 1000;
// 4、格式化这个时间毫秒值就是结果
System.out.println(sdf.format(time));
}
}
❗❗❗使用 p a r s e ( ) parse() parse()这个方法的时候, s d f sdf sdf与 s t r str str的关系是: s d f sdf sdf构造是输入的形式必须与要转换的 s t r str str格式相同(这个相同指的是严格相同,空格都必须相同!!!!)只有这样才能够正确的转化。
Calendar类
C
a
l
e
n
d
a
r
Calendar
Calendar类代表了系统此刻日期对应的日历类,是一个抽象类,不能直接调用构造方法,只能调用
g
e
t
I
n
s
t
a
n
c
e
(
)
getInstance()
getInstance()方法来获取当前日历对象:
本着抽象类不能创建对象来说,源码里面应该有多态的使用吧(其实就是没看懂源码)。
常用API
示例:
public class CalendarDemo{
public static void main(String[] args) {
// 1、拿到系统此刻日历对象
//值得注意的是calendar是个引用数据类型
//所以直接打印cal,打印出来的是对应的存储地址
Calendar cal = Calendar.getInstance();
System.out.println(cal);
// 2、获取日历的信息:public int get(int field):取日期中的某个字段信息。
int year = cal.get(Calendar.YEAR); //取cal存储的年份
System.out.println(year);
int mm = cal.get(Calendar.MONTH) + 1; //cal存储的月份:0~11
System.out.println(mm);
int days = cal.get(Calendar.DAY_OF_YEAR); //今天是一年中第几天
System.out.println(days);
// 3、public void set(int field,int value):修改日历的某个字段信息。
cal.set(Calendar.HOUR , 12);
System.out.println(cal);
// 4.public void add(int field,int amount):为某个字段增加/减少指定的值
// 请问64天后是什么时间
cal.add(Calendar.DAY_OF_YEAR , 64);
cal.add(Calendar.MINUTE , 59);
// 5.public final Date getTime():拿到此刻日期对象,注意这里返回的是日期对象
Date d = cal.getTime();
System.out.println(d);
// 6.public long getTimeInMillis(): 拿到此刻时间毫秒值
long time = cal.getTimeInMillis();
System.out.println(time);
}
}
★
\red{★}
★直接一提的是这个
s
e
t
(
)
set()
set()方法,日历类本来记录的就是时间,大多数也是记录当前的时间,使用
s
e
t
(
)
set()
set()去修改里面的内容,属实有点多余,所以用的很少
★★
\red{★★}
★★
a
d
d
add
add方法也会根据你前面填写的数据来自动匹配后面的类型
Calendar小总结
能背就背,背不了就查 \huge{能背就背,背不了就查} 能背就背,背不了就查