Period và Duration
Thuộc phần Logic và luồng chương trình trong hành trình Java của Coddy. Bài học 57 trên 59.
Period biểu thị một khoảng thời gian tính theo ngày tháng (năm, tháng, ngày), còn Duration biểu thị một khoảng thời gian tính theo giờ (giờ, phút, giây).
Tạo một Period:
Period period = Period.of(1, 2, 15);
// 1 năm, 2 tháng, 15 ngàyTạo một Duration:
Duration duration = Duration.ofHours(2);
// 2 giờ
Duration minutes = Duration.ofMinutes(90);
// 90 phútSau khi chạy đoạn code trên, period chứa:
P1Y2M15D // Định dạng ISO-8601Đo khoảng cách giữa hai ngày bằng Period.between(). Hàm này nhận hai giá trị LocalDate và chia khoảng cách thành năm, tháng và ngày:
LocalDate start = LocalDate.of(2024, 1, 15);
LocalDate end = LocalDate.of(2025, 3, 20);
Period p = Period.between(start, end);
p.getYears(); // 1
p.getMonths(); // 2
p.getDays(); // 5getDays() chỉ trả về số ngày còn lại sau khi tính đủ số năm và tháng, chứ không phải tổng số ngày giữa hai ngày. LocalDateTime cung cấp ngày của nó bằng toLocalDate().
Đo khoảng cách giữa hai thời điểm bằng Duration.between(), hàm này nhận hai giá trị LocalDateTime (hoặc LocalTime):
LocalDateTime from = LocalDateTime.of(2024, 3, 15, 10, 30);
LocalDateTime to = LocalDateTime.of(2024, 3, 15, 14, 45);
Duration d = Duration.between(from, to);
d.toHours(); // 4
d.toMinutes(); // 255
d.toMinutesPart(); // 15toMinutes() tính tổng khoảng cách theo phút, bao gồm cả giờ. toMinutesPart() trả về số phút còn lại sau khi tính đủ số giờ, nên khoảng cách này là 4 giờ 15 phút.
Thử thách
DễTạo một phương thức có tên calculateDifference nhận bốn đối số:
- Một String (
start) theo định dạng "yyyy-MM-dd HH:mm" - Một String (
end) theo định dạng "yyyy-MM-dd HH:mm" - Một String (
unit) có giá trị "period" hoặc "duration" - Một String (
format) có giá trị "full" hoặc "simple"
Phương thức cần:
- Tính khoảng chênh lệch giữa ngày bắt đầu và ngày kết thúc
- Trả về khoảng chênh lệch theo định dạng đã chỉ định
Các thông báo trả về:
- Nếu ngày không hợp lệ: trả về "Invalid date format"
- Nếu đơn vị không hợp lệ: trả về "Invalid unit"
- Nếu định dạng không hợp lệ: trả về "Invalid format"
- Với khoảng thời gian có định dạng "full": "Years: X, Months: Y, Days: Z"
- Với khoảng thời gian có định dạng "simple": "XyYmZd"
- Với khoảng thời lượng có định dạng "full": "Hours: X, Minutes: Y", trong đó Y là số phút còn lại sau khi tính số giờ tròn
- Với khoảng thời lượng có định dạng "simple": "XhYm"
Tự làm thử
import java.util.Scanner;
import java.time.*;
import java.time.format.*;
public class Main {
public static String calculateDifference(String start, String end, String unit, String format) {
// Viết code của bạn ở đây
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String start = scanner.nextLine();
String end = scanner.nextLine();
String unit = scanner.nextLine();
String format = scanner.nextLine();
System.out.println(calculateDifference(start, end, unit, format));
}
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
1Mảng đa chiều
Kiến thức cơ bản về mảng 2DTruy cập phần tử trong mảng 2DVòng lặp lồng nhau với mảng 2DÔn tập về mảng 2DPhép cộng và phép trừ ma trậnMảng không đềuMảng 3D trở lênCác mẫu thường gặp với mảng 2DÔn tập về mảng4HashSet phần 1
HashSet là gì?Thêm một phần tửXóa một phần tửKiểm tra phần tử có tồn tại khôngRỗng và kích thướcXóa và sao chépÔn tập: HashSet10Ngày và giờ
Kiến thức cơ bản về LocalDateCác thao tác với LocalTimeCách dùng LocalDateTimePeriod và DurationĐịnh dạng ngày thángXử lý múi giờ2HashMap phần 1
HashMap là gì?Khai báo HashMapTruy cập giá trịKiểm tra khóa có tồn tạiChỉnh sửa từ điểnÔn tập: HashMapTự luyện tập: Trình biên dịch Java online