1.班级转Date
班级Calendar
程序员喜欢这个Date
类,因为它的简单性和对 Unix 标准的支持,但如您所知,每朵玫瑰都有刺。
程序员想要一个“智能”Date
类。他们以课堂的形式得到了他们想要的东西Calendar
。它被认为是一种不仅可以存储日期,还可以对日期执行困难操作的方法。
该类的全名Calendar
是 java.util.Calendar。如果您决定在代码中使用它,请不要忘记将它添加到导入语句中。
您可以使用以下命令创建Calendar
对象:
Calendar date = Calendar.getInstance();
该类的静态getInstance()
方法Calendar
创建一个Calendar
用当前日期初始化的对象。您想要的日历将根据运行该程序的计算机的设置创建。
或者更准确地说,你得到的日历……那是因为地球上的人类并不局限于单一的日历。相反,他们使用了很多。几乎每个人都与某种宗教或国家有关。该类Calendar
支持其中的 3 个:
日历 | 描述 |
---|---|
公历 | 基督教公历 |
佛历 | 佛历 |
日本皇历 | 日本皇历 |
但也有中国和阿拉伯日历。基本上,处理时间并不像看起来那么容易。
在编写本课程时,中国历法的正式年份是 4716。根据伊斯兰历,年份是 1398 年。欢迎来到大世界,我的程序员朋友。
2.创建一个日历对象
我们将使用公历,因为它是世界上最通用的。至少在中国购买甲骨文并将中国日历作为主要日历之前。
您可以使用如下语句创建具有任何日期的日历对象:
Calendar date = new GregorianCalendar(year, month, day);
是的,你必须GregorianCalendar
每次都写。除了Calendar
,您还可以编写GregorianCalendar
— 这也行得通。但是写作只是Calendar
更短。
年份必须全写,例如,您不能用 19 代替 2019。月份仍然从零开始编号。但和以前一样,一个月中的天数不是从零开始编号的。书呆子!
要设置时间和日期,您需要将时间作为附加参数传递:
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
如果需要,您甚至可以以毫秒为单位传递。它们是秒数之后的参数。
3. 在屏幕上显示一个日历对象
如果您只是在屏幕上打印一个日历对象,您将不会对结果很满意。
代码 |
---|
|
控制台输出 |
|
这里要记住的是日历是日历,而不是日期:它有各种设置,都会显示在屏幕上。
SimpleDateFormat
用一个对象来显示日历是合适的,但在我们研究它之前,你可以使用这个生活技巧。
Date date = calendar.getTime();
对象Calendar
可以很容易地转换为Date
对象,并且您已经知道如何显示Date
对象。您可以使用这样的代码将Calendar
对象转换为Date
:
使用getTime()
方法:
代码 | 控制台输出 |
---|---|
|
|
那是完全不同的事情,不是吗?
4. 处理日期元素
要获取日期的特定元素(例如年、月、...),该类Calendar
具有get()
方法。这是一个单一的方法,但它有参数:
int month = calendar.get(Calendar.MONTH);
其中calendar
是Calendar
变量,MONTH
是类的常量字段Calendar
。
您将类的常量字段之一Calendar
作为参数传递给该get
方法,并获得所需的值作为结果。
例子
代码 | 描述 |
---|---|
|
纪元( 在 共同 纪元 之前 或 之后) |
要更改日期的元素,请使用以下set
方法:
calendar.set(Calendar.MONTH, value);
其中calendar
是Calendar
变量,MONTH
是类的常量字段Calendar
。
使用set
方法时,将类的一个Calendar
常量字段作为第一个参数传递,将新值作为第二个参数传递。
例子
代码 | 描述 |
---|---|
|
年 = 2019 月 = 七月(从 0 开始编号) 第 4 天 小时 分钟 秒 |
5.Calendar
类的常量
该类的常量字段Calendar
不限于用于命名日期元素的字段。似乎有适合各种场合的场地。
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
例如,有常量字段来引用月份:
还有星期几:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
我们不会列出所有内容。如果您在代码中看到这样的常量,我们只是不想让您感到惊讶。
使用常量使代码更具可读性,这就是程序员使用它们的原因。月份从零开始编号也是为了提高可读性。或不。
Calendar
6. 更改对象中的日期
该类Calendar
有一个方法可以让您以更智能的方式处理日期。例如,您可以向日期添加年、月或几天。或者把他们带走。此方法称为add()
。使用它看起来像这样:
calendar.add(Calendar.MONTH, value);
其中calendar
是Calendar
变量,MONTH
是类的常量字段Calendar
。
使用add
方法时,将类的一个Calendar
常量字段作为第一个参数和第二个参数(要添加的新值)传递。
这是另一种智能方法。让我们看看它有多聪明:
代码 |
---|
|
控制台输出 |
|
此方法了解 2019 年 2 月只有 28 天,因此结果日期为 3 月 1 日。
现在让我们带走2个月!我们应该得到什么?2018 年 12 月 27 日!我们现在检查一下。
要执行导致更早日期的操作,您需要将负值传递给该add()
方法:
代码 |
---|
|
控制台输出 |
|
有用!
这种方法考虑了月份和闰年的不同长度。总而言之,一个很棒的方法。这正是大多数使用日期的程序员所需要的。
7.日期的滚动元素
但有时在某些情况下我们不希望这种聪明的行为,例如,您想对日期的一部分做一些事情而不改变其他一切。
该类为此Calendar
提供了特殊方法。roll()
它的签名就像add()
方法一样,但是这个方法只改变日期的一个元素,其余的保持不变。
例子:
代码 |
---|
|
控制台输出 |
|
我们更改了月份,但年份和日期保持不变。
GO TO FULL VERSION