So sánh 2 ngày trong c yyyymmdd

Để format date các bạn đã quá quen với nhứng thư viện như moment rồi đúng không. Tuy nhiên hiện tại dự án mình lại muốn check thêm cả MMDD, YYYYMM nữa thì thư viện này ko đáp ứng được. (Đôi khi dữ liệu được nhập từ file csv nên nó có rất nhiều format khác nhau. VD: 202212, 1230) Nên mình đã sử dụng regex pattern để kiểm tra nó.

Cách kiểm tra

Để kiểm tra xem một chuỗi có ở định dạng YYYYMMdd hay không, bạn có thể sử dụng biểu thức chính quy. Một biểu thức chính quy là một mẫu có thể được sử dụng để khớp các chuỗi.

Dưới đây là một ví dụ về biểu thức chính quy có thể được sử dụng để kiểm tra xem một chuỗi có ở định dạng YYYYMMdd hay không:

/^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$/

Để sử dụng biểu thức chính quy này, bạn có thể sử dụng `match()`phương thức của đối tượng chuỗi trong JavaScript. Đây là một ví dụ về cách sử dụng nó:

var dateString = "20221216";
if (dateString.match(/^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$/)) {
  console.log("The string is in the YYYYMMdd format");
} else {
  console.log("The string is not in the YYYYMMdd format");
}

Để kiểm tra xem một chuỗi có ở định dạng YYYYMM hay không, bạn có thể sử dụng một biểu thức chính quy tương tự:

`moment`0

Và để kiểm tra xem một chuỗi có ở định dạng MMDD hay không, bạn có thể sử dụng biểu thức chính quy này:

`moment`1

Bạn có thể sử dụng `match()`phương pháp tương tự để kiểm tra xem một chuỗi có khớp với bất kỳ biểu thức chính quy nào không.

Mình hy vọng bạn thích bài viết này và học thêm được điều gì đó mới.

Donate mình một ly cafe hoặc 1 cây bút bi để mình có thêm động lực cho ra nhiều bài viết hay và chất lượng hơn trong tương lai nhé. À mà nếu bạn có bất kỳ câu hỏi nào thì đừng ngại comment hoặc liên hệ mình qua: Zalo - 0374226770 hoặc Facebook. Mình xin cảm ơn.

wikiHow là một trang "wiki", nghĩa là nhiều bài viết ở đây là nội dung của nhiều tác giả cùng viết nên. Để tạo ra bài viết này, các tác giả tình nguyện đã thực hiện chỉnh sửa và cải thiện bài viết theo thời gian.

Bài viết này đã được xem 24.617 lần.

Có nhiều cách để so sánh ngày (date) trong Java. Về bản chất, ngày đại diện cho một thời điểm (dài) và được viết dưới dạng số phần nghìn giây đã trôi qua kể từ ngày 1/1/1970. Trong Java, Date là một đối tượng với nhiều phương thức so sánh. Bất kỳ phương thức nào so sánh hai ngày với nhau về bản chất chính là so sánh thời gian của ngày.

  1. Ngày là kế thừa có thể so sánh của và vì thế hai ngày có thể được so sánh trực tiếp bằng phương thức compareTo. Nếu các ngày này có cùng thời điểm thì phương thức sẽ trả về 0. Nếu ngày được so sánh có trước ngày còn lại thì giá trị nhỏ hơn 0 sẽ được trả về. Nếu ngày được so sánh có sau ngày còn lại, giá trị trả về sẽ lớn hơn 0. Nếu hai ngày bằng nhau, giá trị 0 sẽ được trả về.
  2. Bạn sẽ cần tạo từng đối tượng date trước khi bắt đầu so sánh chúng. Một trong những cách để thực hiện là sử dụng lớp SimpleDateFormat. Lớp này cho phép nhập giá trị ngày vào đối tượng date một cách dễ dàng. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //Để khai báo những giá trị mới trong đối tượng date mới, hãy sử dụng cùng định dạng khi tạo ngày. Date date1 = sdf.parse("1995-02-23"); //date1 là 23/2/1995 Date date2 = sdf.parse("2001-10-31"); //date2 là 31/10/2001 Date date3 = sdf.parse("1995-02-23"); //date3 là 23/2/1995
  3. Mã dưới đây sẽ cho bạn thấy từng trường hợp: ít hơn, bằng và nhiều hơn. date1.compareTo(date2); //date1 < date2, trả về giá trị nhỏ hơn 0 date2.compareTo(date1); //date2 > date1, trả về giá trị lớn hơn 0 date1.compareTo(date3); //date1 = date3, hiển thị giá trị 0 Quảng cáo
  1. Bạn có thể so sánh ngày bằng phương thức equals, after và before. Nếu hai ngày có cùng thời điểm, phương thức equals sẽ trả về giá trị true. Những ví dụ bên dưới sẽ sử dụng ngày đã tạo từ phương thức compareTo trước đó.
  2. Mã này có hai trường hợp: true và false. Nếu date1 có trước date2, before sẽ trả về giá trị true. Còn nếu không, before sẽ trả về là false. System.out.print(date1.before(date2)); //trả về giá trị true System.out.print(date2.before(date2)); //trả về giá trị false
  3. Mã này có hai trường hợp: true và false. Nếu date2 có sau date1, after sẽ trả về giá trị true. Còn nếu không thì after sẽ hiển thị giá trị false. System.out.print(date2.after(date1));//trả về giá trị true System.out.print(date1.after(date2));//trả về giá trị false
  4. Mã này có hai trường hợp: true và false. Nếu hai ngày này cùng thời điểm, equals sẽ trả về giá trị true. Còn nếu không thì equals sẽ phản hồi giá trị false. System.out.print(date1.equals(date3));//trả về giá trị true System.out.print(date1.equals(date2));//trả về giá trị false Quảng cáo
  1. Lớp calendar cũng có phương thức compareTo, equals, after và before, chúng hoạt động tương tự như lớp date được mô tả ở trên. Vì vậy, nếu thông tin ngày nằm trong lịch thì bạn không cần trích xuất ngày chỉ để so sánh.
  2. Để sử dụng những phương thức trong lịch, bạn sẽ cần một số trường hợp Calendar. May mắn là bạn chỉ cần lấy thời gian từ những trường hợp Date được tạo sẵn. Calendar cal1 = Calendar.getInstance(); //biểu thị là cal1 Calendar cal2 = Calendar.getInstance(); //biểu thị là cal2 Calendar cal3 = Calendar.getInstance(); //biểu thị là cal3 cal1.setTime(date1); //áp dụng ngày vào cal1 cal2.setTime(date2); cal3.setTime(date3);
  3. Mã bên dưới sẽ trả về giá trị true vì cal1 có trước cal2. System.out.print(cal1.before(cal2)); //trả về giá trị true
  4. Mã bên dưới sẽ trả về giá trị false vì cal1 có trước cal2. System.out.print(cal1.after(cal2)); //trả về giá trị false
  5. Mã bên dưới sẽ hiển thị ví dụ của cả hai trường hợp true và false. Điều kiện còn tùy vào trường hợp lịch được so sánh. Mã này sẽ trả về giá trị "true", rồi đến "false" ở dòng tiếp theo. System.out.println(cal1.equals(cal3)); //trả về giá trị true: cal1 == cal3 System.out.print(cal1.equals(cal2)); //trả về giá trị false: cal1 != cal2 Quảng cáo
Phương thức này cũng có thể so sánh trực tiếp thời điểm của hai ngày, tuy nhiên những phương pháp bên trên dễ đọc và được ưa chuộng hơn. Đây là phép so sánh giữa hai loại dữ liệu nguyên thủy, vì thế có thể trả về kết quả dấu "<", ">" và "==". Trước khi tiến hành so sánh ngày, bạn cần tạo số nguyên dài kiểu long lấy dữ liệu từ những đối tượng Date đã tạo trước đó. May mắn là phương thức getTime() sẽ thực hiện gần như toàn bộ thao tác cho bạn.

long time1 = getTime(date1); //biểu thị time1 nguyên thủy từ date1 long time2 = getTime(date2); //biểu thị time2 nguyên thủy từ date2

Sử dụng dấu bé hơn (<) để so sánh hai giá trị số nguyên vừa rồi. Bởi vì time1 có trước time 2 nên kết quả đầu tiên sẽ hiển thị. Statement còn lại sẽ được bao gồm cho cú pháp thích hợp.

date1.compareTo(date2); //date1 < date2, trả về giá trị nhỏ hơn 0 date2.compareTo(date1); //date2 > date1, trả về giá trị lớn hơn 0 date1.compareTo(date3); //date1 = date3, hiển thị giá trị 0 0

Sử dụng dấu lớn hơn (>) để so sánh hai giá trị số nguyên trên. Bởi vì time1 lớn hơn time 2 nên kết quả đầu tiên sẽ được trả về. Statement còn lại sẽ được bao gồm cho cú pháp thích hợp.

date1.compareTo(date2); //date1 < date2, trả về giá trị nhỏ hơn 0 date2.compareTo(date1); //date2 > date1, trả về giá trị lớn hơn 0 date1.compareTo(date3); //date1 = date3, hiển thị giá trị 0 1

Sử dụng dấu kiểm tra đẳng thức (==) để so sánh xem hai giá trị số nguyên trên có bằng nhau hay không. Bởi vì time1 bằng với time3 nên kết quả đầu tiên sẽ được trả về. Nếu chương trình nhận về statement khác thì nghĩa là các thời gian không bằng nhau.