1. Chuyển từ Date
lớp này sang Calendar
lớp khác
Các lập trình viên yêu thích Date
lớp học này vì tính đơn giản và hỗ trợ các tiêu chuẩn Unix, nhưng như bạn biết đấy, bông hồng nào cũng có gai.
Các lập trình viên muốn có một lớp học "thông minh" Date
. Và họ đã có được những gì họ muốn dưới hình thức lớp Calendar
học. Nó được hình thành như một cách để không chỉ lưu trữ ngày tháng mà còn để thực hiện các thao tác khó với ngày tháng.
Tên đầy đủ của Calendar
lớp là java.util.Calendar. Đừng quên thêm nó vào câu lệnh nhập nếu bạn quyết định sử dụng nó trong mã của mình.
Bạn có thể tạo một Calendar
đối tượng bằng lệnh này:
Calendar date = Calendar.getInstance();
Phương thức tĩnh getInstance()
của Calendar
lớp tạo một Calendar
đối tượng được khởi tạo với ngày hiện tại. Lịch bạn muốn sẽ được tạo dựa trên cài đặt của máy tính chạy chương trình.
Hay chính xác hơn, lịch bạn nhận được... Đó là bởi vì con người trên Trái đất không bị giới hạn trong một lịch duy nhất. Thay vào đó, họ sử dụng nhiều. Và hầu hết mọi người trong số họ đều gắn liền với một tôn giáo hoặc quốc gia nào đó. Lớp Calendar
hỗ trợ 3 trong số đó:
Lịch | Sự miêu tả |
---|---|
GregorianLịch | Lịch Gregorian Kitô giáo |
Phật GiáoLịch | Phật lịch |
Nhật BảnĐế QuốcLịch | lịch hoàng gia nhật bản |
Nhưng cũng có lịch Trung Quốc và Ả Rập. Về cơ bản, làm việc với thời gian không dễ dàng như người ta tưởng.
Trong lịch Trung Quốc, năm chính thức là năm 4716 tại thời điểm viết bài học này. Và theo lịch Hồi giáo, năm đó là năm 1398. Chào mừng đến với thế giới rộng lớn, người bạn lập trình viên của tôi.
2. Tạo đối tượng lịch
Chúng tôi sẽ sử dụng lịch Gregorian, vì nó là lịch phổ biến nhất trên thế giới. Ít nhất là cho đến khi Trung Quốc mua Oracle và biến lịch Trung Quốc thành lịch chính.
Bạn có thể tạo một đối tượng lịch với bất kỳ ngày nào bằng cách sử dụng câu lệnh như sau:
Calendar date = new GregorianCalendar(year, month, day);
Vâng, bạn phải viết GregorianCalendar
mọi lúc. Thay vì Calendar
, bạn cũng có thể viết GregorianCalendar
— điều đó cũng sẽ hiệu quả. Nhưng viết just Calendar
thì ngắn hơn.
Năm phải được viết đầy đủ, ví dụ: bạn không thể viết 19 thay vì 2019. Các tháng vẫn được đánh số từ 0. Nhưng cũng như trước đây, các ngày trong tháng không được đánh số từ số không. Mọt sách!
Để đặt thời gian cũng như ngày, bạn cần chuyển thời gian dưới dạng đối số bổ sung:
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
Bạn thậm chí có thể vượt qua tính bằng mili giây nếu cần. Chúng là tham số sau số giây.
3. Hiển thị đối tượng lịch trên màn hình
Nếu bạn chỉ in một đối tượng lịch trên màn hình, bạn sẽ không hài lòng lắm với kết quả.
Mã số |
---|
|
Đầu ra bảng điều khiển |
|
Điều cần lưu ý ở đây là lịch là lịch, không phải ngày : nó có tất cả các loại cài đặt sẽ được hiển thị trên màn hình.
Sẽ là phù hợp nếu sử dụng một SimpleDateFormat
đối tượng để hiển thị lịch, nhưng bạn có thể sử dụng thủ thuật cuộc sống này cho đến khi chúng tôi nghiên cứu về nó.
Date date = calendar.getTime();
Một Calendar
đối tượng có thể dễ dàng chuyển đổi thành một Date
đối tượng và bạn đã biết cách hiển thị một Date
đối tượng. Bạn có thể sử dụng mã như thế này để chuyển đổi một Calendar
đối tượng thành Date
:
Sử dụng getTime()
phương pháp:
Mã số | Đầu ra bảng điều khiển |
---|---|
|
|
Đó là một vấn đề hoàn toàn khác, phải không?
4. Làm việc với các phần tử của ngày tháng
Để lấy một phần tử cụ thể của một ngày (ví dụ: năm, tháng, ...), lớp Calendar
có get()
phương thức. Đó là một phương thức duy nhất, nhưng nó có các tham số:
int month = calendar.get(Calendar.MONTH);
Đâu calendar
là một Calendar
biến, và MONTH
là một trường hằng của Calendar
lớp.
Bạn chuyển một trong Calendar
các trường hằng số của lớp làm đối số cho get
phương thức và kết quả là bạn nhận được giá trị mong muốn.
ví dụ
Mã số | Sự miêu tả |
---|---|
|
kỷ nguyên (trước hoặc sau kỷ nguyên chung) năm tháng ngày trong tháng ngày trong tuần giờ phút giây |
Để thay đổi một phần tử của ngày, hãy sử dụng set
phương thức:
calendar.set(Calendar.MONTH, value);
Đâu calendar
là một Calendar
biến, và MONTH
là một trường hằng của Calendar
lớp.
Khi làm việc với set
phương thức, bạn chuyển một trong Calendar
các trường hằng số của lớp làm đối số đầu tiên và giá trị mới làm đối số thứ hai.
ví dụ
Mã số | Sự miêu tả |
---|---|
|
năm = 2019 tháng = tháng 7 (đánh số từ 0) ngày thứ 4 giờ phút giây |
5. Hằng của Calendar
lớp
Các trường hằng số của Calendar
lớp không bị giới hạn đối với các trường để đặt tên các phần tử của một ngày tháng. Dường như có các lĩnh vực cho mọi dịp.
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
Ví dụ: có các trường cố định để chỉ các tháng:
Và cả những ngày trong tuần:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
Chúng tôi sẽ không liệt kê tất cả mọi thứ. Chúng tôi chỉ không muốn bạn ngạc nhiên nếu thấy các hằng số như thế này trong mã.
Sử dụng các hằng số làm cho mã dễ đọc hơn, đó là lý do tại sao các lập trình viên sử dụng chúng. Và các tháng cũng được đánh số từ 0 để cải thiện khả năng đọc. Hay không.
6. Thay đổi ngày trong Calendar
đối tượng
Lớp này Calendar
có một phương thức cho phép bạn thao tác vào một ngày theo những cách thông minh hơn. Ví dụ: bạn có thể thêm một năm, một tháng hoặc vài ngày vào một ngày. Hoặc lấy đi chúng đi. Phương pháp này được gọi là add()
. Làm việc với nó trông như thế này:
calendar.add(Calendar.MONTH, value);
Đâu calendar
là một Calendar
biến, và MONTH
là một trường hằng của Calendar
lớp.
Khi làm việc với add
phương thức, bạn chuyển một trong Calendar
các trường hằng số của lớp làm đối số đầu tiên và làm đối số thứ hai — giá trị mới sẽ được thêm vào.
Đây là một phương pháp thông minh khác. Hãy xem nó thông minh như thế nào:
Mã số |
---|
|
Đầu ra bảng điều khiển |
|
Phương pháp này hiểu rằng tháng 2 năm 2019 chỉ có 28 ngày nên ngày có kết quả là ngày 1 tháng 3.
Bây giờ chúng ta hãy lấy đi 2 tháng! Chúng ta nên lấy gì? Ngày 27 tháng 12 năm 2018! Hãy kiểm tra ngay bây giờ.
Để thực hiện một thao tác dẫn đến một ngày sớm hơn, bạn cần chuyển một giá trị âm cho phương add()
thức:
Mã số |
---|
|
Đầu ra bảng điều khiển |
|
Nó hoạt động!
Phương pháp này tính độ dài khác nhau của tháng cũng như năm nhuận. Tất cả trong tất cả, một phương pháp tuyệt vời. Đó chính xác là điều mà hầu hết các lập trình viên làm việc với ngày tháng cần.
7. Các yếu tố lăn của một ngày
Nhưng đôi khi có những tình huống chúng ta không muốn hành vi thông minh này, chẳng hạn như bạn muốn làm điều gì đó với một phần của ngày mà không thay đổi mọi thứ khác.
Lớp Calendar
có roll()
phương pháp đặc biệt cho việc này. Chữ ký của nó giống như add()
phương thức, nhưng phương thức này chỉ thay đổi một phần tử của ngày, phần còn lại không thay đổi.
Ví dụ:
Mã số |
---|
|
Đầu ra bảng điều khiển |
|
Chúng tôi đã thay đổi tháng, nhưng năm và ngày vẫn không thay đổi.