Cách kiểm tra điều kiện ngày hết hạn khi nhập thông tin cho lớp HangHoa trong Java

Mình có một class HangHoa gồm các thuộc tính như mã hàng hóa (string, không được để trống), tên hàng hóa (string, không được để trống), số lượng (int, lớn hơn 0), ngày sản xuất (string), ngày hết hạn (string, phải sau ngày sản xuất), mình đang bị mắc chỗ kiểm tra điều kiện của ngày sản xuất phải sau ngày hết hạn, có ai giúp mình ý tưởng để xử lý điều kiện này không?

public class ThucPham {
	private static Scanner scanner = new Scanner(System.in);

	private String maHang;
	private String tenHang;
	private double donGia;
	private String ngaySanXuat;
	private String ngayHetHan;

	public void nhapThucPham() {
		System.out.print("Nhập mã hàng: ");
		while (!setMaHang(scanner.nextLine()));
		System.out.print("Nhập tên hàng: ");
		while (!setTenHang(scanner.nextLine()));
		System.out.print("Nhập đơn giá: ");
		while (!setDonGia(Double.parseDouble(scanner.nextLine())));
		System.out.print("Nhập ngày sản xuất: ");
		ngaySanXuat = scanner.nextLine();
		System.out.print("Nhập ngày hết hạn: ");
		ngayHetHan = scanner.nextLine();
	}

	public void xuatThucPham() {
		System.out.println(toString());
	}

	@Override
	public String toString() {
		return "MH = " + maHang + ", TH =" + tenHang + ", ĐG = " + donGia + ", NSX = " + ngaySanXuat + ", NHH = "
				+ ngayHetHan;
	}

	public boolean setMaHang(String maHang) {
		if (maHang != null && maHang.length() > 0) {
			this.maHang = maHang;
			return true;
		} else {
			System.err.print("Nhập lại mã hàng: ");
			return false;
		}
	}

	public boolean setTenHang(String tenHang) {
		if (tenHang != null && tenHang.length() > 0) {
			this.tenHang = tenHang;
			return true;
		} else {
			System.err.print("Nhập lại tên hàng: ");
			return false;
		}
	}

	public boolean setDonGia(double donGia) {
		if (donGia > 0) {
			this.donGia = donGia;
			return true;
		} else {
			System.err.print("Nhập lại đơn giá: ");
			return false;
		}
	}
}

Bắt phải là kiểu chuỗi (String) à?
Trong Java có lớp hỗ trợ thời gian: Date. Nếu không bắt buộc thì bạn đổi kiểu sang Date chỉ cần dùng các phương thức hỗ trợ có sẵn trong Date là tính được ngày trước/sau.


Các cách tiếp cận:

1. Kiểu chuỗi

Tách ngày, tháng, năm ra và so sánh 2 thời gian này với nhau theo thứ tự ưu tiên năm > tháng > ngày.

2. Kiểu chuỗi, dùng SimpleDateFormatDate

Chuyển từ chuỗi thành kiểu Date thông qua SimpleDateFormat và so sánh.

3. Kiểu Date và so sánh luôn

3 Likes

Dạ không bắt buộc là String ạ. Nếu để đổi thuộc tính private String ngaySanXuat, ngayHetHan sang kiểu Date thì ta làm như thế nào ạ?

Bài hướng dẫn trên mạng về java string to date trên mạng rất nhiều, so sánh java date compare cũng tương tự. Bạn tự tìm và tham khảo.

Bài này có lẽ bạn nên dùng cách tiếp cận thứ 1. Đề bài có lẽ yêu cầu tự làm mọi thứ.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?