Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách chuyển đổi Date sang múi giờ trong Java bằng cách sử dụng lớp SimpleDateFormat để định dạng ngày và thiết lập múi giờ mong muốn.

package com.journaldev.util;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class DateFormatter {
/**
* Utility function to convert java Date to TimeZone format
* @param date
* @param format
* @param timeZone
* @return
*/
public static String formatDateToString(Date date, String format,
String timeZone) {
// null check
if (date == null) return null;
// create SimpleDateFormat object with input format
SimpleDateFormat sdf = new SimpleDateFormat(format);
// default system timezone if passed null or empty
if (timeZone == null || "".equalsIgnoreCase(timeZone.trim())) {
timeZone = Calendar.getInstance().getTimeZone().getID();
}
// set timezone to SimpleDateFormat
sdf.setTimeZone(TimeZone.getTimeZone(timeZone));
// return Date in required format with timezone as String
return sdf.format(date);
}
public static void main(String[] args) {
//Test formatDateToString method
Date date = new Date();
System.out.println("Default Date:"+date.toString());
System.out.println("System Date: "+formatDateToString(date, "dd MMM yyyy hh:mm:ss a", null));
System.out.println("System Date in PST: "+formatDateToString(date, "dd MMM yyyy hh:mm:ss a", "PST"));
System.out.println("System Date in IST: "+formatDateToString(date, "dd MMM yyyy hh:mm:ss a", "IST"));
System.out.println("System Date in GMT: "+formatDateToString(date, "dd MMM yyyy hh:mm:ss a", "GMT"));
}
}
Kết quả khi chạy chương trình:
Default Date:Wed Nov 14 21:37:01 PST 2012
System Date: 14 Nov 2012 09:37:01 PM
System Date in PST: 14 Nov 2012 09:37:01 PM
System Date in IST: 15 Nov 2012 11:07:01 AM
System Date in GMT: 15 Nov 2012 05:37:01 AM
Từ kết quả trên, có thể thấy hệ thống đang sử dụng múi giờ PST, sau đó chương trình đã chuyển đổi cùng một đối tượng Date sang các múi giờ khác như IST và GMT để in ra. Dựa trên ví dụ trong bài trước, bạn cũng có thể chuyển đổi ngược chuỗi trả về thành đối tượng Date.
Cập nhật: Java 8 đã bổ sung API Date Time mới, bạn nên tham khảo thêm.