Cách so sánh ngày tháng năm trong java

Hôm nay rảnh rỗi phát triển một số tính năng cho Openbravo POS có liên quan tới xử lý thời gian, ví dụ : Tính năng cho phép người dùng thiết lập tự động một chương trình khuyến mãi theo thời gian từ ngày nào đến nào và có thể chọn cho 1 khoảng thời gian nào đó trong ngày [Giờ vàng - Happy Hour] . Tự dưng đang làm đụng phải vấn đề xử lý thời gian ví dụ như : Muốn biết khoảng cách giữa 2 ngày, so sánh 2 khoảng thời gian , cộng trừ 2 khoảng thời gian ... ==> Sau một hồi lượm lặt từ Internet , mấy cuốn bí kíp ... tôi lưu lại một số phương thức sau phòng khi dùng lại cho nhanh và cũng muốn share cho những ai chưa biết

1. Tăng hoặc giảm ngày, tháng, năm [lên / xuống] một đơn vị thời gian cho một mốc thời gian.

Để làm điều này bạn sử dụng 2 phương thức roll[] hoặc add[] . Tôi không muốn giải thích nhiều vì bạn có thể tham khảo điều đó tại đây , nhưng đoạn code ví dụ sẽ giúp bạn thấy rõ cách dùng . Tôi muốn nói một chút về sự khác nhau giữa 2 phương thức này. - Đối với phương thức roll[] : làm thay đổi [Tăng / giảm] một đối tượng calendar cụ thể và không thay đổi đối tượng calendar lớn hơn [Đối tượng Calendar.MONTH được coi là lớn hơn Calendar.DATE, Calendar.YEAR lớn hơn Calendar.MONTH]. Ví dụ: Bạn muốn thay đổi ngày trong mốc thời gian ["31-07-2011"] thêm 8 ngày nữa ==> Bạn sử dụng roll[] : roll[Calendar.DATE, 8] ; ==> Kết quả thu được sẽ là ["08-07-2011"] .

- Đối với phương thức add[]: làm thay đổi [Tăng / giảm] một đối tượng calendar cụ thể đồng thời làm thay đổi đối tượng calendar lớn hơn . Ví dụ : Đối với mốc thời gian ["31-07-2011"] ở ví dụ trên, nếu dùng add[]:

Java cung cấp lớp Date có sẵn trong java.util package, lớp này tóm lược ngày tháng và thời gian hiện tại.

Để hiểu sâu hơn các khái niệm được trình bày trong chương này, mời bạn tham khảo loạt bài: Ví dụ về Date & Time trong Java.

Lớp Date hỗ trợ hai constructor. Constructor đầu tiên khởi tạo đối tượng với ngày và thời gian hiện tại.

Date[ ]

Constructor sau chấp nhận một tham số bằng số mili giây đã trôi qua từ nửa đêm ngày 1/1/1970.

Date[long millisec]

Một khi bạn có một đối tượng Date có sẵn, bạn có thể gọi bất kỳ phương thức hỗ trợ nào để thao tác với ngày tháng này:

STT Phương thức và Miêu tả 1 boolean after[Date date]

Trả về true nếu gọi đối tượng Date chứa một ngày mà chậm hơn ngày đã xác định, nếu không là false.

2 boolean before[Date date]

Trả về true nếu gọi đối tượng Date chứa một ngày mà sớm hơn ngày đã xác định, nếu không là false.

3 Object clone[ ]

Sao chép đối tượng Date đang gọi

4 int compareTo[Date date]

So sánh giá trị đối tượng đang gọi với giá trị đó của date. Trả về 0 nếu các giá trị này là cân bằng. Trả về một giá trị âm nếu đối tượng đang gọi là sớm hơn date. Trả về một giá trị dương nếu đối tượng đang gọi chậm hơn date.

5 int compareTo[Object obj]

Tiến hành tương tự như compareTo[Date] nếu đối tượng là của lớp Date. Nếu không thì, nó cho một ClassCastException.

6 boolean equals[Object date]

Trả về true nếu đối tượng Date đang gọi chứa thời gian và ngày tháng giống như date đã cho, nếu không là false.

7 long getTime[ ]

Trả về số mili giây đã trôi qua từ 1/1/1970

8 int hashCode[ ]

Trả về một mã hóa băm [hash code] cho đối tượng đang gọi

9 void setTime[long time]

Thiết lập ngày tháng và thời gian như time đã cho, mà biểu diễn một time đã trôi qua [giá trị mili giây] từ nửa đêm 1/1/1970

10 String toString[ ]

Biến đổi đối tượng Date đang gọi thành một chuỗi và trả về kết quả

Quảng cáo

Nhận Date và Time hiện tại trong Java

Thực sự dễ dàng để nhận date và time hiện tại trong Java. Bạn có thể sử dụng một đối tượng Date đơn giản với phương thức toString[] để in date và time hiện tại như sau:

import java.util.Date; public class DateDemo { public static void main[String args[]] {

   // khoi tao mot doi tuong Date
   Date date = new Date[];
   // hien thi date va time boi su dung toString[]
   System.out.println[date.toString[]];
} }

Nó sẽ cho kết quả sau:

Mon May 04 09:51:52 CDT 2009

So sánh Date trong Java

Có 3 cách để so sánh hai date trong Java:

  • Bạn có thể sử dụng getTime[] để nhận số mili giây đã trôi qua từ nửa đêm 1/1/1970 cho cả hai đối tượng và sau đó so sánh hai giá trị này.
  • Bạn có thể sử dụng các phương thức before[], after[] và equals[]. Bởi vì tháng thứ 12 ở trước tháng thứ 18, ví dụ, new Date[99, 2, 12].before[new Date[99, 2, 18]] trả về true.
  • Bạn có thể sử dụng phương thức compareTo[], mà được định nghĩa bởi Comparable interface và được thi hành bởi Date.

Quảng cáo

Định dạng Date bởi sử dụng SimpleDateFormat trong Java

SimpleDateFormat là một lớp cố định [cụ thể] để định dạng và parse các date theo một phương thức nhạy cảm với locale. SimpleDateFormat cho phép bạn bắt đầu bởi việc họn bất kỳ pattern đã được định nghĩa bởi người dùng cho định dạng date-time. Ví dụ:

import java.util.; import java.text.; public class DateDemo { public static void main[String args[]] {

  Date dNow = new Date[ ];
  SimpleDateFormat ft = 
  new SimpleDateFormat ["E yyyy.MM.dd 'at' hh:mm:ss a zzz"];
  System.out.println["Date hien tai: " + ft.format[dNow]];
} }

Nó sẽ cho kết quả:

Date hien tai: Sun 2004.07.18 at 04:14:09 PM PDT

Mã hóa định dạng SimpleDateFormat trong Java

Để xác định định dạng thời gian, sử dụng một chuỗi time mẫu. Trong pattern này, tất cả chữ cái ASCII được dự trữ [dành riêng] như là các ký tự pattern, mà được định nghĩa như sau:

Ký tự Miêu tả Ví dụ G Tên mệnh danh của thời đại AD y Năm trong dạng 4 chữ số 2001 M Tháng trong năm July or 07 d Ngày trong tháng 10 h Giờ trong dạng A.M./P.M. [1~12] 12 H Giờ trong ngày [0~23] 22 m Phút trong giờ 30 s Giây trong phút 55 S Số mili giây 234 E Ngày trong tuần Tuesday D Ngày trong năm 360 F Ngày của tuần trong tháng 2 [Wed thứ hai trong July] w Tuần trong năm 40 W Tuần trong tháng 1 a A.M./P.M. PM k Giờ trong ngày [1~24] 24 K Giờ dạng A.M./P.M. [0~11] 10 z Time zone Eastern Standard Time ' Dãy thoát cho văn bản Dấu giới hạn " Trích dẫn đơn `

Định dạng Date sử dụng printf trong Java

Định dạng date và time có thể được thực hiện một cách đơn giản bởi sử dụng phương thức printf trong Java. Bạn sử dụng một định dạng hai chữ cái, bắt đầu với t và kết thúc với một trong các ký tự trong bảng dưới. Ví dụ:

import java.util.Date; public class DateDemo { public static void main[String args[]] {

 // khoi tao mot doi tuong Date
 Date date = new Date[];
 // Hien thi date va time boi su dung toString[]
 String str = String.format["Date hien tai/Time : %tc", date ];
 System.out.printf[str];
} }

Nó sẽ cho kết quả:

Date hien tai/Time : Sat Dec 15 16:37:57 MST 2012

Nó sẽ là khá ngờ nghệch nếu bạn phải cung cấp cho date nhiều time để định dạng mỗi phần. Với lý do này, một chuỗi định dạng có thể chỉ dẫn chỉ mục của tham số để được định dạng.

Chỉ mục phải ngay lập tức theo sau bởi dấu % và nó phải được kết thúc bởi một dấu $. Ví dụ:

import java.util.Date; public class DateDemo { public static void main[String args[]] {

   // khoi tao mot doi tuong Date
   Date date = new Date[];
   // Hien thi date va time boi su dung toString[]
   System.out.printf["%1$s %2$tB %2$td, %2$tY", 
                     "Date la:", date];
} }

Nó sẽ cho kết quả:

Date la: February 09, 2004

Bạn cũng có thể sử dụng ký hiệu

Chủ Đề