Java - Ngày và giờ
Java cung cấp Date lớp học có sẵn trong java.util gói, lớp này đóng gói ngày và giờ hiện tại.
Lớp Date hỗ trợ hai hàm tạo như được hiển thị trong bảng sau.
Sr.No. | Cấu tạo & Mô tả |
---|---|
1 | Date( ) Hàm khởi tạo này khởi tạo đối tượng với ngày và giờ hiện tại. |
2 | Date(long millisec) Hàm tạo này chấp nhận một đối số bằng số mili giây đã trôi qua kể từ nửa đêm, ngày 1 tháng 1 năm 1970. |
Sau đây là các phương thức của lớp ngày.
Sr.No. | Phương pháp & Mô tả |
---|---|
1 | boolean after(Date date) Trả về true nếu đối tượng Date đang gọi chứa ngày muộn hơn ngày được chỉ định theo ngày, nếu không, nó trả về false. |
2 | boolean before(Date date) Trả về true nếu đối tượng Date đang gọi chứa ngày sớm hơn ngày được chỉ định bởi ngày tháng, ngược lại, nó trả về false. |
3 | Object clone( ) Nhân bản đối tượng Ngày đang gọi. |
4 | int compareTo(Date date) So sánh giá trị của đối tượng đang gọi với giá trị của ngày tháng. Trả về 0 nếu các giá trị bằng nhau. Trả về giá trị âm nếu đối tượng gọi sớm hơn ngày. Trả về giá trị dương nếu đối tượng gọi muộn hơn ngày. |
5 | int compareTo(Object obj) Hoạt động giống hệt nhau để so sánhTo (Ngày) nếu obj thuộc lớp Ngày. Nếu không, nó ném ra một ClassCastException. |
6 | boolean equals(Object date) Trả về true nếu đối tượng Date đang gọi chứa cùng thời gian và ngày với đối tượng được chỉ định theo ngày, ngược lại, nó trả về false. |
7 | long getTime( ) Trả về số mili giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970. |
số 8 | int hashCode( ) Trả về mã băm cho đối tượng đang gọi. |
9 | void setTime(long time) Đặt ngày và giờ theo thời gian được chỉ định, biểu thị thời gian đã trôi qua tính bằng mili giây từ nửa đêm, ngày 1 tháng 1 năm 1970. |
10 | String toString( ) Chuyển đổi đối tượng Date đang gọi thành một chuỗi và trả về kết quả. |
Lấy ngày và giờ hiện tại
Đây là một phương pháp rất dễ dàng để lấy ngày và giờ 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 ngày và giờ hiện tại như sau:
Thí dụ
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date using toString()
System.out.println(date.toString());
}
}
Điều này sẽ tạo ra kết quả sau:
Đầu ra
on May 04 09:51:52 CDT 2009
So sánh ngày
Sau đây là ba cách để so sánh hai ngày:
Bạn có thể sử dụng getTime () để lấy số mili giây đã trôi qua kể từ nửa đêm, ngày 1 tháng 1 năm 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 trước (), sau () và bằng (). Vì ngày 12 của tháng đến trước ngày 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 (), được xác định bởi giao diện So sánh và được triển khai theo Ngày.
Định dạng ngày bằng SimpleDateFormat
SimpleDateFormat là một lớp cụ thể để định dạng và phân tích cú pháp ngày tháng theo cách nhạy cảm với ngôn ngữ. SimpleDateFormat cho phép bạn bắt đầu bằng cách chọn bất kỳ mẫu nào do người dùng xác định để định dạng ngày-giờ.
Thí 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("Current Date: " + ft.format(dNow));
}
}
Điều này sẽ tạo ra kết quả sau:
Đầu ra
Current Date: Sun 2004.07.18 at 04:14:09 PM PDT
Mã định dạng DateFormat đơn giản
Để chỉ định định dạng thời gian, hãy sử dụng chuỗi mẫu thời gian. Trong mẫu này, tất cả các chữ cái ASCII được dành riêng dưới dạng các chữ cái mẫu, được định nghĩa như sau:
Tính cách | Sự miêu tả | Thí dụ |
---|---|---|
G | Người chỉ định thời đại | QUẢNG CÁO |
y | Năm có bốn chữ số | 2001 |
M | Tháng trong năm | Tháng 7 hoặc 07 |
d | Ngày trong tháng | 10 |
h | Giờ tính theo SA / CH (1 ~ 12) | 12 |
H | Giờ trong ngày (0 ~ 23) | 22 |
m | Phút sau giờ | 30 |
S | Giây sau phút | 55 |
S | Mili giây | 234 |
E | Ngày trong tuần | Thứ ba |
D | Ngày trong năm | 360 |
F | Ngày trong tuần trong tháng | 2 (thứ tư thứ hai trong tháng bảy) |
w | Tuần trong năm | 40 |
W | Tuần trong tháng | 1 |
a | Điểm đánh dấu AM / PM | BUỔI CHIỀU |
k | Giờ trong ngày (1 ~ 24) | 24 |
K | Giờ SAU / CH (0 ~ 11) | 10 |
z | Múi giờ | giờ chuẩn phương Đông |
' | Thoát cho văn bản | Dấu phân cách |
" | Trích dẫn duy nhất | ` |
Định dạng ngày bằng printf
Định dạng ngày và giờ có thể được thực hiện rất dễ dàng bằng cách sử dụng printfphương pháp. Bạn sử dụng định dạng hai chữ cái, bắt đầu bằngt và kết thúc bằng một trong các chữ cái của bảng như được hiển thị trong đoạn mã sau.
Thí dụ
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date
String str = String.format("Current Date/Time : %tc", date );
System.out.printf(str);
}
}
Điều này sẽ tạo ra kết quả sau:
Đầu ra
Current Date/Time : Sat Dec 15 16:37:57 MST 2012
Sẽ hơi ngớ ngẩn nếu bạn phải cung cấp ngày tháng nhiều lần để định dạng từng phần. Vì lý do đó, một chuỗi định dạng có thể chỉ ra chỉ mục của đối số được định dạng.
Chỉ mục phải ngay lập tức theo sau% và nó phải được kết thúc bằng $.
Thí dụ
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
}
}
Điều này sẽ tạo ra kết quả sau:
Đầu ra
Due date: February 09, 2004
Ngoài ra, bạn có thể sử dụng cờ <. Nó chỉ ra rằng đối số tương tự như trong đặc tả định dạng trước đó sẽ được sử dụng lại.
Thí dụ
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display formatted date
System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
}
}
Điều này sẽ tạo ra kết quả sau:
Đầu ra
Due date: February 09, 2004
Các ký tự chuyển đổi ngày và giờ
Tính cách | Sự miêu tả | Thí dụ |
---|---|---|
c | Ngày và giờ đầy đủ | Thứ Hai, 04 tháng 05 09:51:52 CĐT 2009 |
F | Ngày ISO 8601 | 2004-02-09 |
D | Ngày được định dạng ở Hoa Kỳ (tháng / ngày / năm) | 02/09/2004 |
T | Thời gian 24 giờ | 18:05:19 |
r | Thời gian 12 giờ | 06:05:19 chiều |
R | Thời gian 24 giờ, không giây | 18:05 |
Y | Năm có bốn chữ số (với các số 0 đứng đầu) | 2004 |
y | Hai chữ số cuối cùng của năm (với các số 0 đứng đầu) | 04 |
C | Hai chữ số đầu tiên của năm (với các số 0 đứng đầu) | 20 |
B | Tên đầy đủ của tháng | tháng 2 |
b | Tên tháng viết tắt | Tháng hai |
m | Tháng có hai chữ số (với các số 0 ở đầu) | 02 |
d | Ngày có hai chữ số (với các số 0 ở đầu) | 03 |
e | Ngày có hai chữ số (không có số 0 ở đầu) | 9 |
A | Tên đầy đủ các ngày trong tuần | Thứ hai |
a | Tên ngày trong tuần viết tắt | Thứ hai |
j | Ngày có ba chữ số trong năm (với các số 0 ở đầu) | 069 |
H | Giờ có hai chữ số (với các số 0 ở đầu), từ 00 đến 23 | 18 |
k | Giờ có hai chữ số (không có số 0 ở đầu), từ 0 đến 23 | 18 |
Tôi | Giờ có hai chữ số (với các số 0 ở đầu), từ 01 đến 12 | 06 |
l | Giờ có hai chữ số (không có số 0 ở đầu), từ 1 đến 12 | 6 |
M | Phút có hai chữ số (với các số 0 ở đầu) | 05 |
S | Giây có hai chữ số (với các số 0 ở đầu) | 19 |
L | Ba chữ số mili giây (với các số 0 ở đầu) | 047 |
N | Chín chữ số nano giây (với các số 0 ở đầu) | 047000000 |
P | Viết hoa điểm đánh dấu buổi sáng hoặc buổi chiều | BUỔI CHIỀU |
p | Viết thường điểm đánh dấu buổi sáng hoặc buổi chiều | buổi chiều |
z | RFC 822 bù số từ GMT | -0800 |
Z | Múi giờ | PST |
S | Giây kể từ 1970-01-01 00:00:00 GMT | 1078884319 |
Q | Mili giây kể từ 1970-01-01 00:00:00 GMT | 1078884319047 |
Có các lớp hữu ích khác liên quan đến Ngày và giờ. Để biết thêm chi tiết, bạn có thể tham khảo tài liệu Java Standard.
Phân tích cú pháp chuỗi thành ngày
Lớp SimpleDateFormat có một số phương thức bổ sung, đặc biệt là parse (), nó cố gắng phân tích cú pháp một chuỗi theo định dạng được lưu trữ trong đối tượng SimpleDateFormat đã cho.
Thí dụ
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
String input = args.length == 0 ? "1818-11-11" : args[0];
System.out.print(input + " Parses as ");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
Một lần chạy mẫu của chương trình trên sẽ tạo ra kết quả sau:
Đầu ra
1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818
Ngủ một lúc
Bạn có thể ngủ trong bất kỳ khoảng thời gian nào từ một phần nghìn giây cho đến thời gian tồn tại của máy tính. Ví dụ: chương trình sau sẽ ngủ trong 3 giây -
Thí dụ
import java.util.*;
public class SleepDemo {
public static void main(String args[]) {
try {
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Điều này sẽ tạo ra kết quả sau:
Đầu ra
Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009
Đo thời gian đã trôi qua
Đôi khi, bạn có thể cần đo thời gian tính bằng mili giây. Vì vậy, hãy viết lại ví dụ trên một lần nữa -
Thí dụ
import java.util.*;
public class DiffDemo {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis( );
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
long end = System.currentTimeMillis( );
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Điều này sẽ tạo ra kết quả sau:
Đầu ra
Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993
Lớp GregorianCalendar
GregorianCalendar là một triển khai cụ thể của một lớp Lịch triển khai lịch Gregorian bình thường mà bạn đã quen thuộc. Chúng tôi đã không thảo luận về lớp Lịch trong hướng dẫn này, bạn có thể tra cứu tài liệu Java tiêu chuẩn cho việc này.
Các getInstance( )phương thức của Lịch trả về một GregorianCalendar được khởi tạo với ngày và giờ hiện tại ở miền địa phương và múi giờ mặc định. GregorianCalendar định nghĩa hai trường: AD và BC. Chúng đại diện cho hai thời đại được xác định bởi lịch Gregory.
Ngoài ra còn có một số hàm tạo cho các đối tượng GregorianCalendar -
Sr.No. | Cấu tạo & Mô tả |
---|---|
1 | GregorianCalendar() Tạo một GregorianCalendar mặc định sử dụng thời gian hiện tại trong múi giờ mặc định với ngôn ngữ mặc định. |
2 | GregorianCalendar(int year, int month, int date) Tạo một GregorianCalendar với ngày cụ thể được đặt trong múi giờ mặc định với ngôn ngữ mặc định. |
3 | GregorianCalendar(int year, int month, int date, int hour, int minute) Tạo GregorianCalendar với ngày và giờ nhất định được đặt cho múi giờ mặc định với ngôn ngữ mặc định. |
4 | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) Tạo GregorianCalendar với ngày và giờ nhất định được đặt cho múi giờ mặc định với ngôn ngữ mặc định. |
5 | GregorianCalendar(Locale aLocale) Tạo GregorianCalendar dựa trên thời gian hiện tại trong múi giờ mặc định với ngôn ngữ nhất định. |
6 | GregorianCalendar(TimeZone zone) Tạo GregorianCalendar dựa trên thời gian hiện tại trong múi giờ nhất định với ngôn ngữ mặc định. |
7 | GregorianCalendar(TimeZone zone, Locale aLocale) Tạo GregorianCalendar dựa trên thời gian hiện tại trong múi giờ nhất định với ngôn ngữ nhất định. |
Dưới đây là danh sách một số phương pháp hỗ trợ hữu ích được cung cấp bởi lớp GregorianCalendar -
Sr.No. | Phương pháp & Mô tả |
---|---|
1 | void add(int field, int amount) Thêm khoảng thời gian được chỉ định (đã ký) vào trường thời gian nhất định, dựa trên quy tắc của lịch. |
2 | protected void computeFields() Chuyển đổi UTC dưới dạng mili giây thành các giá trị trường thời gian. |
3 | protected void computeTime() Ghi đè Lịch Chuyển đổi giá trị trường thời gian thành UTC dưới dạng mili giây. |
4 | boolean equals(Object obj) So sánh GregorianCalendar này với một tham chiếu đối tượng. |
5 | int get(int field) Nhận giá trị cho một trường thời gian nhất định. |
6 | int getActualMaximum(int field) Trả về giá trị lớn nhất mà trường này có thể có, cho ngày hiện tại. |
7 | int getActualMinimum(int field) Trả về giá trị nhỏ nhất mà trường này có thể có, cho ngày hiện tại. |
số 8 | int getGreatestMinimum(int field) Trả về giá trị nhỏ nhất cao nhất cho trường đã cho nếu thay đổi. |
9 | Date getGregorianChange() Nhận ngày thay đổi Lịch Gregory. |
10 | int getLeastMaximum(int field) Trả về giá trị lớn nhất thấp nhất cho trường đã cho nếu thay đổi. |
11 | int getMaximum(int field) Trả về giá trị lớn nhất cho trường đã cho. |
12 | Date getTime() Nhận thời gian hiện tại của Lịch này. |
13 | long getTimeInMillis() Nhận được thời gian hiện tại của Lịch này là dài. |
14 | TimeZone getTimeZone() Nhận múi giờ. |
15 | int getMinimum(int field) Trả về giá trị nhỏ nhất cho trường đã cho. |
16 | int hashCode() Ghi đè Mã băm. |
17 | boolean isLeapYear(int year) Xác định xem năm đã cho có phải là năm nhuận hay không. |
18 | void roll(int field, boolean up) Cộng hoặc trừ (lên / xuống) một đơn vị thời gian trên trường thời gian nhất định mà không thay đổi các trường lớn hơn. |
19 | void set(int field, int value) Đặt trường thời gian với giá trị đã cho. |
20 | void set(int year, int month, int date) Đặt giá trị cho các trường năm, tháng và ngày. |
21 | void set(int year, int month, int date, int hour, int minute) Đặt giá trị cho các trường năm, tháng, ngày, giờ và phút. |
22 | void set(int year, int month, int date, int hour, int minute, int second) Đặt giá trị cho các trường năm, tháng, ngày, giờ, phút và giây. |
23 | void setGregorianChange(Date date) Đặt ngày thay đổi GregorianCalendar. |
24 | void setTime(Date date) Đặt thời gian hiện tại của Lịch này với Ngày đã cho. |
25 | void setTimeInMillis(long millis) Đặt thời gian hiện tại của Lịch này từ giá trị dài đã cho. |
26 | void setTimeZone(TimeZone value) Đặt múi giờ với giá trị múi giờ đã cho. |
27 | String toString() Trả về biểu diễn chuỗi của lịch này. |
Thí dụ
import java.util.*;
public class GregorianCalendarDemo {
public static void main(String args[]) {
String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"};
int year;
// Create a Gregorian calendar initialized
// with the current date and time in the
// default locale and timezone.
GregorianCalendar gcalendar = new GregorianCalendar();
// Display current time and date information.
System.out.print("Date: ");
System.out.print(months[gcalendar.get(Calendar.MONTH)]);
System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
System.out.println(year = gcalendar.get(Calendar.YEAR));
System.out.print("Time: ");
System.out.print(gcalendar.get(Calendar.HOUR) + ":");
System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
System.out.println(gcalendar.get(Calendar.SECOND));
// Test if the current year is a leap year
if(gcalendar.isLeapYear(year)) {
System.out.println("The current year is a leap year");
}else {
System.out.println("The current year is not a leap year");
}
}
}
Điều này sẽ tạo ra kết quả sau:
Đầu ra
Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year
Để có danh sách đầy đủ các hằng có sẵn trong lớp Lịch, bạn có thể tham khảo tài liệu Java tiêu chuẩn.