Lớp Date hỗ trợ tới 2 hàm dựng.
Hàm dựng đầu tiên khởi tạo đối tượng với ngày và thời gian
Hàm dựng tiếp theo cho phép đối số bằng số mili giây đã xảy ra kể từ nửa đêm ngày 1 tháng 1 năm 1970
Khi đối tượng Date có sẵn, có thể gọi bất kỳ phương thức hỗ trợ sau để sử dụng
STT | Mô tả phương thức |
1 | boolean after(Date date) Trả về True nếu đối tượng Date có ngày sau ngày quy định, nếu không thì trả về false |
2 | boolean before(Date date) Trả về True nếu đối tượng Date có ngày trước ngày quy định, nếu không thì trả về false |
3 | Object clone() Bản sao của đối tượng |
4 | int compareTo(Date date) So sánh giá trị của đối tượng được gọi với ngày. Trả lại 0 nếu giá trị bằng. Trả lại giá trị âm nếu đối tượng được gọi sớm hơn ngày. Trả lại giá trị dương nếu đối tượng được gọi sau ngày. |
5 | int compareTo(Object obj) Hoạt động hệt như compareTo(Date date) nếu obj của lớp Date. Nếu không nó sẽ ném một ClassCastException |
6 | boolean equals(Object date) Trả về true nếu đối tượng Date được gọi có chứa cùng thời gian và ngày như quy định Date, nếu không, nó trả về false. |
7 | long getTime() Trả về số mili giây đã trôi qua kể từ ngày 01 tháng 1 năm 1970. |
8 | int hashCode( ) Trả về hash Code cho các đối tượng cách gọi. |
9 | void setTime(long time) Thiết lập thời gian và ngày theo quy định của Date, đại diện cho thời gian trôi qua trong 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 được gọi vào chuỗi và trả về kết quả. |
Lấy Ngày và Thời gian hiện tại
Bạn có thể sử dụng đối tượng Date đơn giản với phương thức toString() để in ngày và thời gian hiện tại như sau:
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());
}
}
Kết quả trả về:
Mon February 17 09:51:52 CDT 2014
So sánh ngày:
Có ba cách để so sánh hai ngày với nhau:
- Có thể sử dụng getTime() để có được số mili giây đã trôi qua kể từ nửa đêm, 01 tháng 1 năm 1970, cho cả hai đối tượng và sau đó so sánh hai giá trị.
- Có thể sử dụng các phương thức before( ), after( ), and equals( ). Vì ngày 12 của tháng trước ngày 18, ví dụ, new Date(99, 2, 12).before(new Date (99, 2, 18)) trả về true.
- Có thể sử dụng phương thức compareTo(), được xác định bởi interface Comparable và được Date thực thi.
Định dạng ngày sử dụng SimpleDateFormat:
SimpleDateFormat là lớp concrete để định dạng và phân tách ngày. SimpleDateFormat cho phép chọn bất kỳ mẫu người dùng định nghĩa 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("Current Date: " + ft.format(dNow));
}
}
Kết quả trả về:
Current Date: Mon 2014.02.17 at 04:14:09 PM PDT
Code định dạng DateFormat đơn giản
Để xác định các định dạng thời gian, sử dụng chuỗi mô tả thời gian.
Ký tự | Mô tả | Ví dụ |
G | Thời kỳ | AD |
y | Năm với 4 chữ số | 2014 |
M | Tháng trong năm | July hoặc 07 |
d | Ngày trong năm | 10 |
h | Giờ AM / PM (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 | Millisecond | 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 |
w | Tuần trong năm | 40 |
W | Tuần trong tháng | 1 |
a | AM / PM | PM |
k | Giờ trong ngày (1 ~ 24) | 24 |
K | Giờ AM / PM (0 ~ 11) | 10 |
z | Múi giờ | Giờ chuẩn mùa đông |
' | Thoát văn bản | Dấu phân cách |
" | Chú thích | ` |
Định dạng ngày sử dụng printf:
Định dạng Ngày và thời gian có thể được thực hiện rất dễ dàng sử dụng phương thức printf. Bạn sử dụng định dạng hai chữ, bắt đầu với t và kết thúc bằng một trong các chữ cái của bảng dưới đây.
Ví 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()
String str = String.format("Ngày/Thời gian hiện tại : %tc", date );
System.out.printf(str);
}
}
Kết quả hiển thị:
Ngày/Thời gian hiện tại : Sat Dec 15 16:37:57 MST 2012
Nhìn thật rối.
Vì lý do đó, một chuỗi định dạng sẽ chỉ ra chỉ số của các đối số phải được định dạng.
Chỉ số phải ngay lập tức làm theo % và kết thúc bởi $.
Ví 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.printf("%1$s %2$tB %2$td, %2$tY",
"Due date:", date);
}
}
Kết quả hiển thị:
Due date: February 09, 2004
Ngoài ra, bạn có thể sử dụng < flag. Nó chỉ ra rằng ltrong đặc điểm kỹ thuật định dạng trước nên được sử dụng một lần nữa.
Ví 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);
}
}
Kết quả hiển thị:
Due date: February 09, 2004
Chuỗi ký tự chuyển đổi Date và Time
Ký tự | Mô tả | Ví dụ |
c | Toàn bộ Ngày và thời gian | Mon May 04 09:51:52 CDT 2009 |
F | Ngày theo chuẩn ISO 8601 | 2004-02-09 |
D | Theo định dạng của Mỹ(tháng/ngày/năm) | 02/09/2004 |
T | 24 giờ | 18:05:19 |
r | 12 giờ | 06:05:19 pm |
R | Thời gian 24 giờ, không có giây | 18:05 |
Y | Năm bốn chữ số (với zero đầu) | 2004 |
y | Cuối cùng hai chữ số của năm (với zeroes đầu) | 04 |
C | Hai chữ số của năm (với zeroes đầu) | 20 |
B | Tên đầy đủ tháng | February |
b | Tên viết tắt tên tháng | Feb |
m | Hai chữ số tháng (với zero đầu) | 02 |
d | Ngày hai chữ số (với zero đầu) | 03 |
e | Ngày hai chữ số (không có hàng zero) | 9 |
A | Tên đầy đủ ngày trong tuần | Monday |
a | Tên các ngày trong tuần viết tắt | Mon |
j | Ngày ba chữ số của năm (với zeroes đầu) | 069 |
H | Giờ hai chữ số (với zeroes đầu), giữa 00 và 23 | 18 |
k | Giờ hai chữ số (không có zeros đầu), giữa 0 và 23 | 18 |
I | Giờ hai chữ số (với zeroes đầu), giữa 01 và 12 | 06 |
l | Giờ hai chữ số (không có zero đầu), từ 1 đến 12 | 6 |
M | Phút hai chữ số (với zeroes đầu) | 05 |
S | Giây hai chữ số (với zeroes đầu) | 19 |
L | Mili giây ba chữ số (với zeroes đầu) | 047 |
N | Nano giây chín chữ số (với zeroes đầu) | 047000000 |
P | Buổi sáng hoặc buổi chiều chữ Hoa | PM |
p | Buổi sáng hoặc buổi chiều chữ thường | pm |
z | RFC 822 số bù 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òn có các lớp hữu ích khác liên quan đến ngày và thời gian.
Ép kiểu String thành Date:
Lớp SimpleDateFormat có một số phương thức bổ sung, đặc biệt là parse(), phân tích chuỗi theo định dạng lưu trữ trong các đối tượng SimpleDateFormat.
Ví 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);
}
}
}
Kết quả hiển thị:
$ java DateDemo
1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818
$ java DateDemo 2007-12-01
2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007
Đây là bài ví dụ về Nhân viên, hiển thị thông tin nhân viên, trong đó có Ngày sinh, đầu vào là chuỗi ngày sinh, được Convert sang định dạng kiểu ngày cho phù hợp với thực tế bài toán
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package java05;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author DOTNETGROUP
*/
public class NhanVien {
/**
* @param args the command line arguments
*/
private String maNV;
private String hoTen;
private String ngaySinh;
private boolean gioiTinh;
String matKhau;
private String cmnd;
String diaChi;
String tel;
double heSoLuong;
boolean status;
public NhanVien(){}
public NhanVien(String maNV_, String hoTen_, String ngaySinh_)
{
this.maNV=maNV_;
this.hoTen=hoTen_;
this.ngaySinh = ngaySinh_;
}
public String toString()
{
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
Date t = null;
try {
t = ft.parse(ngaySinh);
} catch (ParseException ex) {
Logger.getLogger(NhanVien.class.getName()).log(Level.SEVERE, null, ex);
}
return "Ma nhan vien: " + maNV + "\nHo ten: " + hoTen + "\nNgay sinh: " + ft.format(t);
}
public static void main(String[] args) {
// TODO code application logic here
NhanVien nv=new NhanVien("NV01", "Nguyen Van A","1989-04-21");
System.out.println(nv.toString());
}
/**
* @return the maNV
*/
public String getMaNV() {
return maNV;
}
/**
* @param maNV the maNV to set
*/
public void setMaNV(String maNV) {
this.maNV = maNV;
}
/**
* @return the hoTen
*/
public String getHoTen() {
return hoTen;
}
/**
* @param hoTen the hoTen to set
*/
public void setHoTen(String hoTen) {
this.hoTen = hoTen;
}
/**
* @return the gioiTinh
*/
public boolean isGioiTinh() {
return gioiTinh;
}
/**
* @param gioiTinh the gioiTinh to set
*/
public void setGioiTinh(boolean gioiTinh) {
this.gioiTinh = gioiTinh;
}
/**
* @return the cmnd
*/
public String getCmnd() {
return cmnd;
}
/**
* @param cmnd the cmnd to set
*/
public void setCmnd(String cmnd) {
this.cmnd = cmnd;
}
/**
* @return the ngaySinh
*/
public String getNgaySinh() {
return ngaySinh;
}
/**
* @param ngaySinh the ngaySinh to set
*/
public void setNgaySinh(String ngaySinh) {
this.ngaySinh = ngaySinh;
}
}
Kết quả:
Sử dụng Sleep
Bạn có thể sleep cho bất kỳ khoảng thời gian từ một phần nghìn giây đến giới hạn của máy tính.
Ví dụ, chương trình sau sẽ hiển thị sau 10 giây:
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!");
}
}
}
Kết quả hiển thị:
Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009
Đo thời gian
Đôi khi, bạn có thể cần phải đo điểm thời gian trong mili giây. Viết lại ví dụ trên:
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!");
}
}
}
Kết quả hiển thị:
Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993
Lớp GregorianCalendar
GregorianCalendar thực hiện Lịch dương lịch bình thường mà bạn đã quen thuộc. Tôi không thảo luận về lớp Calendar trong hướng dẫn này, bạn có thể tìm tài liệu Java chuẩn để hiểu thêm.
Phương thức getInstance() trả về GregorianCalendar khởi tạo với ngày giờ hiện tại trong vùng miền cục bộ mặc định và múi giờ. GregorianCalendar xác định hai vùng: AD và BC. Đại diện cho hai thời kỳ được xác định theo lịch Gregorian.
Một số hàm dựng của đối tượng GregorianCalendar:
STT | Mô tả hàm dựng |
1 | GregorianCalendar() Dựng GregorianCalendar mặc định sử dụng thời gian hiện tại trong múi giờ mặc định với mặc định địa phương. |
2 | GregorianCalendar(int year, int month, int date) Dựng GregorianCalendar với ngày được thiết lập trong múi giờ mặc định với mặc định địa phương. |
3 | GregorianCalendar(int year, int month, int date, int hour, int minute) Dựng GregorianCalendar với ngày nhất định và thời gian thiết lập cho múi giờ mặc định với mặc định địa phương. |
4 | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) Dựng GregorianCalendar với ngày nhất định và thời gian cài cho múi giờ mặc định với mặc định địa phương. |
5 | GregorianCalendar(Locale aLocale) Dựng GregorianCalendar dựa trên thời gian hiện tại trong múi giờ mặc định với miền địa phương nhất định. |
6 | GregorianCalendar(TimeZone zone) Dựng GregorianCalendar dựa trên thời gian hiện tại trong múi giờ địa phương. |
7 | GregorianCalendar(TimeZone zone, Locale aLocale) Dựng GregorianCalendar dựa trên thời gian hiện tại trong múi giờ với miền địa phương. |
Đây là danh sách các phương thức hỗ trợ hữu ích được cung cấp bởi lớp GregorianCalendar:
STT | Mô tả phương thức |
1 | void add(int field, int amount) Thêm quy định (ký hiệu) lượng thời gian cho các trường thời gian, dựa trên các quy tắc của calendar. |
2 | protected void computeFields() Chuyển đổi UTC như phần nghìn giây đến giá trị trường thời gian. |
3 | protected void computeTime() Ghi đè Calendar Chuyển đổi giá trị trường thời gian UTC là mili giây. |
4 | boolean equals(Object obj) So sánh GregorianCalendar đến đối tượng tham chiếu. |
5 | int get(int field) Lấy giá trị trường thời gian nhất định. |
6 | int getActualMaximum(int field) Trả lại giá trị tối đa mà trường này có thể có, đưa ra ngày hiện tại. |
7 | int getActualMinimum(int field) Trả lại giá trị tối thiểu mà trường này có thể có, đưa ra ngày hiện tại. |
8 | int getGreatestMinimum(int field) Trả về giá trị tối thiểu cao nhất cho trường nếu thay đổi. |
9 | Date getGregorianChange() Lấy Gregorian Calendar thay đổi. |
10 | int getLeastMaximum(int field) Trả về giá trị tối đa thấp nhất cho trường nếu thay đổi. |
11 | int getMaximum(int field) Trả về giá trị tối đa cho trường. |
12 | Date getTime() Lấy thời gian hiện tại của Calendar. |
13 | long getTimeInMillis() Lấy thời gian hiện tại của Calendar kiểu long. |
14 | TimeZone getTimeZone() Lấy múi giờ. |
15 | int getMinimum(int field) Trả về giá trị tối thiểu cho trường. |
16 | int hashCode() Override hashCode. |
17 | boolean isLeapYear(int year) Xác định xem năm nào là năm nhuận. |
18 | void roll(int field, boolean up) Sẽ cộng hoặc trừ (lên / xuống) một đơn vị thời gian trên trường thời gian mà không thay đổi trường lớn hơn |
19 | void set(int field, int value) Thiết lập trường thời gian với giá trị nhất định. |
20 | void set(int year, int month, int date) Thiết lập giá trị cho trường năm, tháng, và ngày. |
21 | void set(int year, int month, int date, int hour, int minute) Thiết lập giá trị cho 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) Thiết lập giá trị cho trường năm, tháng, ngày, giờ, phút và giây. |
23 | void setGregorianChange(Date date) Thiết lập ngày GregorianCalendar thay đổi. |
24 | void setTime(Date date) Thiết lập thời gian hiện tại của Lịch với ngày nhận được. |
25 | void setTimeInMillis(long millis) Thiết lập thời gian hiện tại của Lịch từ giá trị dài. |
26 | void setTimeZone(TimeZone value) Thiết lập múi giờ với giá trị vùng thời gian nhất định. |
27 | String toString() Trả về chuỗi đại diện của lịch này. |
Ví 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");
}
}
}
Kết quả hiển thị:
Date: Feb 23 2014
Time: 2:53:6
The current year is not a leap year
Như vậy năm này không phải là năm nhuận.