0%

JAVA学习-Calendar类

Calendar类实个挺神奇的类,具体原因也没有细究,记一下它的用法。

Calendar类是一个基于Date类的类,它其中用到了Date,并且有相应的方法。而Calendar比Date增加了一些更通用的甚至,比如可以单独甚至年月日。

新建一个(假)实例

和其他很多函数用法不一样,Calendar不用new来新建一个实例,而是用Calendar.getInstance(),因为某些原因所以我叫它(假)实例。

1
Calendar c = Calendar.getInstance();

这样我们就拥有了一个时间为现在时间的Calendar类c了。

设置时间

Calendar有两种设置方法。

调用set

第一种调用set,用法是set(变量,值)
变量可以是Calendar.HOUR, Calendar.YEAR 等。

1
2
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2019);

这样年份就变成了2019

调用setTime

setTime就是一个和Date有关的方法了,它的传参是一个Date类,为什么要用Date呢,因为Date的日期计算方式是距离一个年份的毫秒数,个人猜测比较方便。
用法就是setTime(date)

1
2
3
Calendar c = Calendar.getInstance();
Date d = new Date();
c.setTime(d);

复制另一个Calendar时间

Calendar有一个方法是getTime()返回的是一个Date类,和setTime很像,因此我的解决方法如下:

1
2
3
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(c2.getTime());

Assert的使用

这里就是为什么我认为我们构建的是一个(假)实例了。
阅读下述代码:

1
2
3
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
assertEquals(c1, c2);

它是不会报错的,十分神奇。。

再看另一端代码:

1
2
3
4
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.set(Calendar.YEAR, 1999);
assertEquals(c1, c2);

当我们修改了年份以后,它是会报错的。

因此,我们得出的结论对于Calendar的assert,它只是对比了日期是否相同,并不对比指针是否一致

搬运自CSDN:https://blog.csdn.net/yueyue200830/article/details/101376719