Java - Ngày & Giờ

Xin chào các bạn, những nhà phát triển Java tương lai! Hôm nay, chúng ta sẽ bắt đầu hành trình thú vị qua thế giới của ngày và giờ trong Java. Là người dạy khoa học máy tính nhân viên, tôi ở đây để hướng dẫn các bạn qua chủ đề đôi khi gây khó khăn nhưng luôn thú vị này. Vậy hãy lấy ra lịch của bạn và cùng nhau bắt đầu!

Java - Date & Time

Giới thiệu về Ngày và Giờ trong Java

Trước khi bắt đầu mã hóa, hãy dành chút thời gian để tôn vinh tầm quan trọng của việc xử lý ngày và giờ trong lập trình. Hãy tưởng tượng bạn đang xây dựng ứng dụng nhắc nhở sinh nhật hoặc bộ đếm ngược cho đêm năm mới. Nếu không có việc xử lý ngày và giờ đúng cách, ứng dụng của bạn sẽ có ích bằng một chảo cà phê sô-cô-la!

Java cung cấp cho chúng ta các công cụ mạnh mẽ để làm việc với ngày và giờ. Chúng ta sẽ tập trung vào hai lớp chính: DateCalendar. Đừng lo lắng nếu những này vẽ ra khá khó hiểu bây giờ - bằng hết bài hướng dẫn này, bạn sẽ trở thành một chuyên gia về ngày giống như một nhà biểu diễn xiếc cirkus!

Lấy Ngày và Giờ Hiện Tại

Hãy bắt đầu với điều đơn giản: lấy ngày và giờ hiện tại. Đó như là hỏi Java, "Heey, bây giờ là mấy giờ?"

import java.util.Date;

public class CurrentDateTime {
public static void main(String[] args) {
Date currentDate = new Date();
System.out.println("Ngày và giờ hiện tại là: " + currentDate);
}
}

Khi bạn chạy mã này, bạn sẽ thấy gì đó như thế này:

Ngày và giờ hiện tại là: Wed Jun 16 15:30:45 EDT 2023

Có phải rất cool không? Lớp Date cung cấp cho chúng ta một bức ảnh chụp nhanh của khoảnh khắc hiện tại. Đó như là tự chụp một bức ảnh selfie của thời gian!

So Sánh Ngày

Bây giờ bạn đã biết cách lấy ngày hiện tại, hãy học cách so sánh các ngày. Điều này rất hữu ích để kiểm tra xem một ngày có trước hoặc sau ngày khác.

import java.util.Date;

public class DateComparison {
public static void main(String[] args) {
Date date1 = new Date();
Date date2 = new Date(date1.getTime() + 86400000); // Thêm 1 ngày trong milliseconds

if (date1.before(date2)) {
System.out.println("date1 trước date2");
}

if (date2.after(date1)) {
System.out.println("date2 sau date1");
}

if (date1.equals(date2)) {
System.out.println("date1 bằng date2");
}
}
}

Trong ví dụ này, chúng ta tạo hai đối tượng Date. date2 được đặt là một ngày sau date1 (chúng ta thêm 86,400,000 milliseconds, số lượng milliseconds trong một ngày). Sau đó, chúng ta sử dụng các phương thức before(), after(), và equals() để so sánh chúng.

Định Dạng Ngày Sử Dụng SimpleDateFormat

Dữ liệu ngày thô không phải lúc nào cũng xinh đẹp hoặc hữu ích. Đó là lúc SimpleDateFormat đến. Nó như một nhà trang điểm cho ngày của bạn, làm cho chúng trông như bạn muốn!

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatting {
public static void main(String[] args) {
Date currentDate = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = formatter.format(currentDate);
System.out.println("Ngày đã định dạng: " + formattedDate);
}
}

Điều này sẽ đầu ra gì đó như thế này:

Ngày đã định dạng: 2023-06-16 15:45:30

Rất đẹp hơn phải không? Chuỗi "yyyy-MM-dd HH:mm:ss" là một mẫu cho SimpleDateFormat chỉ ra cách định dạng ngày. Hãy phân tích nó:

  • yyyy: Năm bốn chữ số
  • MM: Tháng trong năm hai chữ số
  • dd: Ngày trong tháng hai chữ số
  • HH: Giờ trong ngày (0-23)
  • mm: Phút trong giờ
  • ss: Giây trong phút

Mã Định Dạng Đơn Giản

Dưới đây là bảng một số mã định dạng phổ biến:

Mã Định Dạng Mô Tả Ví Dụ
y Năm 2023
M Tháng trong năm 07
d Ngày trong tháng 16
H Giờ trong ngày (0-23) 15
m Phút trong giờ 45
s Giây trong phút 30
E Tên ngày trong tuần Thứ Ba
D Ngày trong năm 167
w Tuần trong năm 24

Phân Tách Chuỗi Thành Ngày

Đôi khi bạn có thể nhận được một ngày dưới dạng chuỗi và cần chuyển đổi nó thành đối tượng Date. SimpleDateFormat cũng có thể giúp đỡ bạn với điều này!

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateParsing {
public static void main(String[] args) {
String dateString = "2023-06-16 15:45:30";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

try {
Date date = formatter.parse(dateString);
System.out.println("Ngày đã phân tách: " + date);
} catch (ParseException e) {
System.out.println("Lỗi phân tách ngày: " + e.getMessage());
}
}
}

Mã này nhận một chuỗi đại diện cho ngày và chuyển đổi nó trở lại thành đối tượng Date. Đó như là ma thuật, nhưng với nhiều dấu phẩy chấm hơn!

Đo Thời Gian Trôi Qua

Giả sử bạn muốn đo thời gian mất đi để làm một việc nào đó. Java làm điều này rất dễ dàng:

public class ElapsedTime {
public static void main(String[] args) {
long start = System.currentTimeMillis();

// Mô hình hóa một số công việc
for (int i = 0; i < 1000000; i++) {
Math.sqrt(i);
}

long end = System.currentTimeMillis();
long elapsed = end - start;

System.out.println("Thời gian đã trôi qua: " + elapsed + " milliseconds");
}
}

Mã này đo thời gian mất đi để tính căn bậc hai của các số từ 0 đến 999,999. Đó như là sử dụng một đồng hồ bấm giờ trong mã của bạn!

Lớp GregorianCalendar

Đối với các hoạt động ngày và giờ nâng cao hơn, Java cung cấp lớp GregorianCalendar. Nó như một cây dao nhân tạo của việc xử lý ngày!

import java.util.GregorianCalendar;
import java.util.Calendar;

public class GregorianCalendarExample {
public static void main(String[] args) {
GregorianCalendar gc = new GregorianCalendar();

int year = gc.get(Calendar.YEAR);
int month = gc.get(Calendar.MONTH) + 1; // Tháng trong lớp Calendar bắt đầu từ 0
int day = gc.get(Calendar.DAY_OF_MONTH);
int hour = gc.get(Calendar.HOUR_OF_DAY);
int minute = gc.get(Calendar.MINUTE);

System.out.printf("Ngày và giờ hiện tại: %04d-%02d-%02d %02d:%02d%n",
year, month, day, hour, minute);

gc.add(Calendar.DAY_OF_MONTH, 7); // Thêm 7 ngày
System.out.println("Ngày sau khi thêm 7 ngày: " + gc.getTime());

boolean isLeapYear = gc.isLeapYear(year);
System.out.println("Năm " + year + " là năm nhuận? " + isLeapYear);
}
}

Ví dụ này cho thấy cách lấy các thành phần riêng của một ngày, thêm thời gian vào một ngày, và thậm chí kiểm tra xem một năm có phải là năm nhuận hay không. Đó như có một máy thời gian trong mã của bạn!

Kết Luận

Xin chúc mừng! Bạn đã bước ra những bước đầu tiên trong thế giới của việc xử lý ngày và giờ trong Java. Hãy nhớ, luyện tập làm cho hoàn hảo, vì vậy đừng sợ thử nghiệm với các khái niệm này. Ai biết? Có lẽ bạn sẽ xây dựng ứng dụng lịch kế hoặc công cụ quản lý thời gian tiếp theo!

Khi chúng ta kết thúc, dưới đây là một câu chuyện hài nhẹ cho các bạn lập trình viên: Tại sao nhà phát triển nghỉ việc? Vì anh ấy không nhận được mảng (một lớp)!

Chúc các bạn mãi mãi mã hóa một cách hạnh phúc, những nhà phát triển Java tương lai!

Credits: Image by storyset