TỔNG QUAN
CẤU TRÚC ĐIỀU KHIỂN
VÒNG LẶP
CHUỖI VÀ MẢNG
COLLECTIONS
THƯ VIỆN QUAN TRỌNG
HƯỚNG ĐỐI TƯỢNG
XỬ LÝ LUỒNG
EXCEPTION
LÀM VIỆC VỚI FILE
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thư viện xử lý ngày tháng trong Java

Trong bài đầu tiên của chương Thư viện quan trọng này, tôi sẽ giới thiệu đến các bạn thư viện đầu tiên đó là thư viện xử lý ngày tháng trong Java và ví dụ minh họa cách sử dụng thư viện này. Cuối bài này, tôi sẽ đưa ra một số bài tập để các bạn luyện tập!

Trong ngôn ngữ lập trình Java, chúng ta có nhiều loại thư viện xử lý ngày tháng nhưng thông thường có 2 loại thư viện được sử dụng nhiều nhất đó là CalendarSimpleDateFormat. Sau đây chúng ta sẽ đi tìm hiểu về 2 loại thư viện này.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Calendar

Trong Java, Calendar cung cấp một tập hợp các phương thức để tương tác với thời gian. Chẳng hạn, chúng ta có thể sử dụng Calendar để lấy thời gian hiện tại của hệ thống và nó cũng được dùng để thực hiện các phép toán giữa ngày và giờ. Dưới đây là ví dụ minh họa cách sử dụng thư viện Calendar trong Java.

Lấy thời gian hiện tại của hệ thống

Ví dụ dưới đây sẽ minh họa cách lấy thời gian hiện tại của hệ thống (bao gồm ngày tháng năm giờ phút giây) sử dụng Calendar:

Ví dụ
public static void main(String[] args) {
	// Tạo đối tượng Calendar mô tả thời điểm hiện tại
	// với Locale (khu vực) và TimeZone (múi giờ) 
	// của máy tính đang chạy.
	Calendar cal = Calendar.getInstance();
		
	// import java.util.Date; để sử dụng Date
	// hiển thị ngày tháng năm giờ phút giây hiện tại của hệ thống
	// sử dụng phương thức getTime()
	// phương thức này sẽ trả về 1 đối tượng Date 
	// lưu trữ thông tin ngày tháng năm giờ phút giây hiện tại của hệ thống
	Date date = cal.getTime();
	// hiển thị thời gian hiện tại
	System.out.println("Thời gian hiện tại của hệ thống là: " + date);
}

Kết quả sau khi biên dịch chương trình:

ketqua vi du lay thoi gian hien tai cua he thong PNG

Ngoài ra, chúng ta có thể sử dụng Calendar để lấy riêng từng giá trị ngày, tháng, năm, giờ, phút, giây hiện tại của hệ thống như sau:

Ví dụ
public static void main(String[] args) {
	Calendar cal = Calendar.getInstance();
		
	// hiển thị ngày hiện tai
	// Calendar.DAY_OF_MONTH sẽ cho biết ngày hiện tại của tháng hiện tại
	// hàm get() sẽ trả về giá trị ngày hiện tại
	System.out.println("Ngày hiện tại là " + cal.get(Calendar.DAY_OF_MONTH));
	
	// hiển thị tháng hiện tại
	// sử dụng Calendar.MONTH
	// vì tháng trong Java sẽ chạy từ 0 đến 11
	// tức là nếu hiện giờ là tháng 7 thì chương trình sẽ hiển thị là tháng 6
	// vì vậy để hiển thị đúng thì ta sẽ cộng thêm tháng đó cho 1
	System.out.print("Tháng hiện tại là ");
	System.out.println(cal.get(Calendar.MONTH)+1);
		
	// hiển thị năm hiện tại
	// Calendar.YEAR sẽ cho biết năm hiện tại
	System.out.println("Năm hiện tại là " + cal.get(Calendar.YEAR));
		
	// hiển thị giờ hiện tại
	// sự khác nhau giữa HOUR và HOUR_OF_DAY là
	// HOUR sẽ hiển thị theo khung giờ 12 giờ, ví dụ 11 giờ tối sẽ hiển thị là 11
	// còn HOUR_OF_DAY sẽ hiển thị theo khung giờ 23 giờ, ví dụ 11 giờ tối sẽ hiển thị là 23
	System.out.println("Giờ hiện tại là " + cal.get(Calendar.HOUR));
	System.out.println("Giờ hiện tại là " + cal.get(Calendar.HOUR_OF_DAY));
		
	// hiển thị phút hiện tại
	// sử dụng Calendar.MINUTE
	System.out.println("Phút hiện tại là " + cal.get(Calendar.MINUTE));
		
	// hiển thị giây hiện tại
	// sử dụng Calendar.SECOND
	System.out.println("Giây hiện tại là " + cal.get(Calendar.SECOND));
}

Kết quả sau khi biên dịch chương trình:

ketqua vi du hien thi rieng ngay thang nam gio phut giay PNG

Thay đổi thời gian của hệ thống

Trong Java, chúng ta có thể sử dụng phương thức set() để thay đổi thời gian như sau:

Cú pháp
Calendar cal = Calendar.getInstance();
cal.set(int field, int value);

, trong đó field là tên giá trị cần thay đổi (ví dụ Calendar.MONTH là tháng) và value là giá trị mới của field.

Ví dụ
public static void main(String[] args) {
	Calendar cal = Calendar.getInstance();
		
	// thay đổi ngày hiện tại thành ngày 9
	// tháng hiện tại thành tháng 12 
	// năm hiện tại thành năm 2018
	// giờ hiện tại thành 10
	// phút hiện tại thành 59
	// và giây hiện tại thành 59
	// sử dụng phương thức set()
	cal.set(Calendar.DAY_OF_MONTH, 9);
	cal.set(Calendar.MONTH, Calendar.DECEMBER);
	cal.set(Calendar.YEAR, 2018);
	cal.set(Calendar.HOUR_OF_DAY, 10);
	cal.set(Calendar.MINUTE, 59);
	cal.set(Calendar.SECOND, 59);
		
	// hiển thi thời gian hiện tại sau khi thay đổi
	System.out.println(cal.getTime());	
		
	// hoặc chúng ta có thể thay đổi tất cả như sau
	cal.set(2016, Calendar.APRIL, 30, 20, 23, 8);

	System.out.println(cal.getTime());	
}

Kết quả sau khi biên dịch chương trình:

ketqua vi du thay doi gia tri calendar PNG

Cộng, trừ thời gian của hệ thống

Trong Java, chúng ta có thể thực hiện phép cộng và trừ thời gian của hệ thống bằng cách sử dụng phương thức add() như sau:

Cú pháp
Calendar cal = Calendar.getInstance();
cal.add(int field, int amount);

, trong đó field là tên giá trị cần thay đổi và amount là số lượng được thêm vào hay trừ đi. Nếu amount > 0 thì sẽ tăng giá trị field lên ứng với giá trị amount, còn amount < 0 thì sẽ giảm giá trị của field ứng với giá trị amount đó.

Ví dụ
public static void main(String[] args) {
	Calendar cal = Calendar.getInstance();
	System.out.println("Thời gian hiện tại là " + cal.getTime());
		
	// cộng thời gian
	// sử dụng phương thức add()
	cal.add(Calendar.MONTH, 4);	// thêm 4 tháng
	cal.add(Calendar.DAY_OF_MONTH, 5);	// và 5 ngày
	System.out.println("Thời gian hiện tại sau khi thay đổi là " + cal.getTime());
		
	// trừ thời gian
	// sử dụng phương thức add()
	cal.add(Calendar.HOUR_OF_DAY, -2);	// giảm giờ hiện tại đi 2 tiếng
	cal.add(Calendar.MINUTE, -3);	// giảm phút hiện tại đi 3 phút
	System.out.println("Thời gian hiện tại sau khi thay đổi là " + cal.getTime());
}

Kết quả sau khi biên dịch chương trình:

ketqua vi du cong tru thoi gian PNG

Phương thức roll()

Chúng ta có thể hình dung về ứng dụng của phương thức roll() như sau: Giả sử hôm nay là tháng 12 năm 2017, nếu chúng ta tăng tháng của ngày hiện tại lên 1 thì kết quả sẽ là tháng 1 năm 2018. Trong trường hợp chúng ta muốn tăng tháng nhưng vẫn giữ nguyên năm thì Java cung cấp cho chúng ta phương thức roll() với cú pháp như sau:

Cú pháp
Calendar cal = Calendar.getInstance();
cal.roll(int field, int amount);

, trong đó field là tên giá trị cần thay đổi và amount là số lượng được thêm vào hay trừ đi. Nếu amount > 0 thì sẽ tăng giá trị field lên ứng với giá trị amount, còn amount < 0 thì sẽ giảm giá trị của field ứng với giá trị amount đó.

Ví dụ
public static void main(String[] args) {
	Calendar cal = Calendar.getInstance();
	System.out.println("Thời gian hiện tại là " + cal.getTime());
		
	// thay đổi tháng thành 12
	cal.set(Calendar.MONTH, Calendar.DECEMBER);
	System.out.println("Thời gian hiện tại sau khi thay đổi là " + cal.getTime());

	// tăng tháng sử dụng phương thức roll()
	// lúc này tháng sẽ là tháng 1 và năm vẫn giữ nguyên
	cal.roll(Calendar.MONTH, 1);
	System.out.println("Thời gian hiện tại sau khi thay đổi là " + cal.getTime());
}

Kết quả sau khi biên dịch chương trình:

ketqua vi du su dung phuong thuc roll PNG

2. SimpleDateFormat

Trong Java, SimpleDateFormat được dùng để định dạng cách hiển thị ngày tháng. Để sử dụng được SimpleDateFormat, chúng ta cần phải import gói thư viện java.text.SimpleDateFormat của Java. Cú pháp import như sau:

Cú pháp
import java.text.SimpleDateFormat;
public class TênClass {
	// ...
}

Dưới đây là ví dụ minh họa cách sử dụng SimpleDateFormat:

Ví dụ
public static void main(String[] args) {
	Calendar cal = Calendar.getInstance();
	Date date = cal.getTime();
		
	System.out.println("Thời gian hiện tại là " + date);
		
	// khai báo 1 đối tượng SimpleDateFormat
	// chi tiết về khai báo đối tượng chúng ta sẽ học trong chương "Lập trình hướng đối tượng"
	// đối tượng này sẽ định dạng ngày theo cấu trúc "dd/MM/yyyy"
	// trong đó "dd" là ngày, "MM" là tháng và "yyyy" là năm
	// nếu ngày và tháng nào có 1 chữ số (ví dụ 1, 2, 3,...)
	// thì sẽ được tự động thêm vào số 0 đằng trước
	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		
	// hiển thị date theo cấu trúc mà chúng ta đã khai báo (dd/MM/yyyy)
	// sử dụng phương thức format()
	System.out.println("Thời gian hiện tại sau khi định dạng là " + sdf.format(date));
		
	// định dạng ngày hiện tại theo cấu trúc "d/M/yyyy"
	// trong đó "d" là ngày, "M" là tháng và "yyyy" là năm
	// với kiểu định dạng này thì ngày và tháng nào có 1 chữ số (ví dụ 1, 2, 3,...)
	// thì sẽ không được thêm vào số 0 đằng trước
	SimpleDateFormat sdf1 = new SimpleDateFormat("d/M/yyyy");
	System.out.println("Thời gian hiện tại sau khi định dạng là " + sdf1.format(date));
		
	// định dạng ngày giờ hiện tại theo cấu trúc "dd/MM/yyyy HH:mm:ss"
	// trong đó "HH" là giờ, "mm" là phút và "ss" là giây
	// "HH" là định dạng 24 giờ, và "hh" là định dạng 12 giờ
	SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
	System.out.println("Ngày giờ hiện tại sau khi định dạng là " + sdf2.format(date));
		
	// hiển thị ngày giờ theo định dạng 12 giờ
	// với định dạng 12 giờ thì chúng ta sẽ thêm vào "aaa"
	// trong đó "aaa" đại diện cho AM/PM
	SimpleDateFormat sdf3 = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss aaa");
	System.out.println("Ngày giờ hiện tại sau khi định dạng là " + sdf3.format(date));
}

Kết quả sau khi biên dịch chương trình:

ketqua vi du simpledateformat PNG

3. Lời kết

Trong bài này, tôi đã hướng dẫn các bạn tìm hiểu về thư viện xử lý ngày tháng trong Java và tôi cũng đã đưa ra một số ví dụ minh họa. Sang bài này, chúng ta sẽ tìm hiểu thư viện tiếp theo - đó là thư viện xử lý dữ liệu số trong Java. Các bạn theo dõi nhé!

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Khi nào dùng Default Methods trong Java 8

Khi nào dùng Default Methods trong Java 8

Ở 2 bài trước chúng ta đã tìm hiểu 2 tính năng mới của Java…

Cách chuyển chữ hoa thành chữ thường trong Java

Cách chuyển chữ hoa thành chữ thường trong Java

Trong bài viết này chúng ta sẽ tìm hiểu về cách chuyển đổi chữ in…

Bài tập tính tổng các số tự nhiên trong Java

Bài tập tính tổng các số tự nhiên trong Java

Các số dương 1, 2, 3, 4, ... được gọi là các số tự nhiên,…

Cách chuyển chữ thường thành chữ hoa trong Java

Cách chuyển chữ thường thành chữ hoa trong Java

Trong chuỗi có thể vừa có ký tự thường vừa có ký tự hoa, nhưng…

Cách viết hoa ký tự đầu tiên trong Java

Cách viết hoa ký tự đầu tiên trong Java

Để hiểu được bài này, các bạn cần có kiến thức căn bản về Java…

Hướng dẫn chuyển đổi giờ phút giây trong Java

Hướng dẫn chuyển đổi giờ phút giây trong Java

Để hiểu được chương trình, các bạn cần có kiến thức cơ bản về Java.…

Cách lấy thời gian hiện tại trong Java

Cách lấy thời gian hiện tại trong Java

Để hiểu được bài viết này, các bạn cần có kiến thức cơ bản sau…

Cách làm tròn số trong Java

Cách làm tròn số trong Java

Khi thực hiện tính toán, việc kết quả ra một con số thập phân dài…

Cách tìm ma trận chuyển vị trong Java

Cách tìm ma trận chuyển vị trong Java

Quá trình hoán đổi giữa hàng và cột được gọi là chuyển vị của ma…

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Để hiểu được bài này, các bạn cần có kiến thức cơ bản về mảng…

Cách nối hai mảng trong Java

Cách nối hai mảng trong Java

Mình sẽ thực hiện hai chương trình nối mảng. Chương trình thứ nhất nối hai…

Cách xóa khoảng trắng của chuỗi trong Java

Cách xóa khoảng trắng của chuỗi trong Java

Mình sẽ thực hiện hai chương trình khác nhau để các bạn có thể hiểu…

In ra tam giác bằng ký tự * và số trong Java

In ra tam giác bằng ký tự * và số trong Java

Mình sẽ giới thiệu cách để in ra các tam giác bằng ký tự *…

Tìm số lớn nhất trong mảng Java

Tìm số lớn nhất trong mảng Java

Các bạn cần tìm hiểu về mảng, cách khởi tạo và in mảng trong Java…

Tìm ước của một số nguyên trong Java

Tìm ước của một số nguyên trong Java

Trong bài viết này chúng ta sẽ tìm hiểu cách tìm tất cả các ước…

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số đối xứng trong Java

Cách kiểm tra số đối xứng trong Java

Trong bài viết này chúng ta sẽ kiểm tra một số có phải là số…

Đảo ngược một số trong Java

Đảo ngược một số trong Java

Mình sẽ giới thiệu các bạn cách đảo ngược một số sử dụng vòng lặp…

Tìm bội chung nhỏ nhất trong Java

Tìm bội chung nhỏ nhất trong Java

Mình sẽ sử dụng hai cách khác nhau để tìm BCNN. Cách thứ nhất mình…

Cách hoán đổi hai số trong Java

Cách hoán đổi hai số trong Java

Trong phần này mình sẽ sử dụng một biến tạm temp() làm biến trung gian…

Top