Video: [C++] Trừ ngày tháng năm giữa hai mốc thời gian - Subtract the date between two timelines 2025
Cũng như bạn không thể sử dụng các toán tử so sánh được xây dựng trong Java với các ngày, bạn cũng không thể sử dụng các toán tử toán học được xây dựng sẵn. Thay vào đó, bạn có thể thực hiện phép cộng và phép trừ vào ngày sử dụng các phương pháp
cộng
và
trừ
và bạn có thể xác định sự khác biệt giữa hai ngày bằng cách sử dụng phương pháp
cho đến
.
Một thực tế quan trọng cần xem xét khi thực hiện tính toán ngày tháng và thời gian là đối tượng Date-Time không thay đổi. Điều đó có nghĩa là một khi bạn tạo một đối tượng Date-Time, bạn không thể thay đổi giá trị của nó. Khi bạn thực hiện phép tính trên đối tượng Date-Time, kết quả là một đối tượng Date-Time mới với một giá trị mới.
Các phương thức
cộng
và
trừ
cho phép bạn thêm các đơn vị ngày và thời gian khác nhau vào một đối tượng Date-Time. Có bốn biến thể cho mỗi lớp
LocalDate
, cho phép bạn thêm hoặc xóa năm, tháng, tuần và ngày với một đối tượng
LocalDate
. Đoạn mã sau sẽ in ngày hiện tại, ngày mai và ngày tháng một tuần, một tháng và một năm từ bây giờ:
Hệ thống. ngoài. println ("Today:" + LocalDate bây giờ ());
Hệ thống. ngoài. println ("Ngày mai:" + LocalDate. now () plusDays (1));
Hệ thống. ngoài. println ("Tuần tới:" + Giờ địa phương. now () plusWeeks (1));
Hệ thống. ngoài. println ("Tháng tiếp theo:" + LocalDate. now (). plusMonths (1));
Hệ thống. ngoài. println ("Năm tới:" + LocalDate. now (). plusYears (1));
Để xác định sự khác biệt giữa hai ngày, sử dụng phương pháp
cho đến
. Nó tính toán sự khác biệt giữa một ngày và ngày được thông qua như là tham số đầu tiên, được đo bằng các đơn vị được chỉ ra bởi tham số thứ hai. Ví dụ: mã sau xác định số ngày từ ngày 16 tháng 5 năm 2014 đến ngày 15 tháng 12 năm 2014:
LocalDate date1 = LocalDate. phân tích cú pháp ("2014-05-16");
LocalDate date2 = LocalDate. phân tích cú pháp ("2014-12-15");
Hệ thống. ngoài. println (date1.cho đến (date2, ChronoUnit. DAYS));
Một số tính toán ngày tháng có thể phức tạp hơn một chút. Ví dụ: hãy xem xét doanh nghiệp lập hóa đơn vào ngày 15 mỗi tháng. Đoạn mã sau đây sẽ hiển thị số ngày kể từ ngày hiện tại cho đến ngày lập hoá đơn tiếp theo:
LocalDate today = LocalDate. hiện nay();
LocalDate invDate = LocalDate. của ngày hôm nay getYear (),
hôm nay getMonthValue (), 15);
if (today getDayOfMonth ()> 15)
invDate = invDate. cộng thêmMonths (1);
long daysToInvoice = hôm nay. cho đến khi (invDate,
ChronoUnit. DAYS);
Hệ thống. ngoài. println (daysToInvoice
+ "cho đến ngày lập hoá đơn tiếp theo.");
Ví dụ này hoạt động bằng cách lần đầu tiên nhận ngày hiện tại, sau đó tạo đối tượng
LocalDate
mới đại diện cho ngày 15 của tháng hiện tại. Sau đó, nếu ngày hiện tại của tháng lớn hơn 15, nó sẽ thêm một tháng vào ngày lập hoá đơn. Nói cách khác, nếu đó là lần thứ 16 trở đi, lập hóa đơn sẽ xảy ra vào ngày 15 của sau tháng chứ không phải tháng này. Sau đó, nó sử dụng phương pháp
cho đến
để xác định số ngày giữa ngày hiện tại và ngày lập hoá đơn kế tiếp.
ChronoUnit
là một bảng kê xác định các đơn vị thời gian khác nhau có thể được sử dụng trong tính toán ngày và giờ. Các giá trị có thể có là:
CENTURIES
NGÀY
DECADES
ERAS
FOREVER
PHÂN PHÚ
HOURS
MICROS
MILLENNIA
MILLIS
MINUTES
THÁNG
NANOS
GIỜ
TUẦN
NĂM
Phần lớn là tự giải thích, nhưng hai trong số đó hơi đặc biệt:
-
ERA
cho biết ngày đề cập đến kỷ nguyên chung (CE, còn gọi là AD) hoặc Before Era (BCE, còn được gọi là BC). -
FOREVER
thể hiện giá trị lớn nhất có thể được biểu diễn dưới dạng thời hạn. Đáng buồn, Java sẽ không cho phép bạn sống mãi mãi. Đoạn mã sau đây là ngoại lệ:
LocalDate birthday = LocalDate. phân tích cú pháp ("1959-05-16);
ngày sinh = sinh nhật. cộng thêm (1, ChronoUnit. FOREVER);
Lưu ý rằng
ChronoUni
t nằm trong
java. thời gian. tạm thời
, do đó, hãy chắc chắn bao gồm các tuyên bố sau ở đầu của bất kỳ chương trình sử dụng
ChronoUnit
:
nhập khẩu java. thời gian. thời gian. *;