Hướng Dẫn Đầu Bắt Về Ngày và Giờ Trong C++
Xin chào các nhà phép thuật C++ tương lai! Hôm nay, chúng ta sẽ bắt đầu hành trình hấp dẫn qua thế giới của ngày và giờ trong C++. Đừng lo nếu bạn chưa từng viết một dòng mã trước đây – tôi sẽ luôn ở bên cạnh bạn, giải thích mọi thứ từng bước. Vậy, hãy lấy ly đồ uống yêu thích của bạn, thoải mái ngồi và hãy bắt đầu nhé!
Hiểu Đơn Vị Cơ Bản
Trước khi chúng ta bắt đầu thao tác với ngày và giờ, điều quan trọng là cần hiểu rằng C++ không có kiểu dữ liệu ngày tích hợp. Thay vào đó, nó sử dụng kiểu dữ liệu time_t
để đại diện thời gian. Điều này có thể có vẻ khó hiểu, nhưng hãy tưởng tượng nó là một con số lớn đại diện cho số giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970. Ngày này thường được gọi là "thời điểm gốc" trong khoa học máy tính – nó giống như ngày sinh của việc tính toán hiện đại!
Ngày và Giờ Hiện Tại
Hãy bắt đầu với điều đơn giản nhưng mạnh mẽ – lấy ngày và giờ hiện tại. Đây là cách chúng ta làm điều đó:
#include <iostream>
#include <ctime>
int main() {
time_t now = time(0);
std::cout << "Thời gian hiện tại: " << now << std::endl;
return 0;
}
Hãy phân tích điều này:
- Chúng ta bao gồm hai header quan trọng:
<iostream>
cho các thao tác nhập/xuất, và<ctime>
cho các hàm liên quan đến thời gian. - Trong hàm
main()
, chúng ta sử dụngtime(0)
để lấy thời gian hiện tại. - Chúng ta lưu trữ thời gian này trong một biến
time_t
có tênnow
. - Cuối cùng, chúng ta in giá trị này.
Khi bạn chạy chương trình này, bạn sẽ thấy một con số lớn được in ra. Đó là số giây kể từ thời điểm gốc. Khó đọc cho con người, phải không? Đừng lo, chúng ta sẽ sửa điều đó ngay bây giờ!
Chuyển đổi time_t Thành Chuỗi
Bây giờ, hãy làm cho đầu ra của chúng ta dễ đọc hơn:
#include <iostream>
#include <ctime>
int main() {
time_t now = time(0);
char* dt = ctime(&now);
std::cout << "Ngày và giờ địa phương hiện tại là: " << dt << std::endl;
return 0;
}
Đây là điều gì mới:
- Chúng ta sử dụng hàm
ctime()
để chuyển đổi giá trịtime_t
của chúng ta thành một chuỗi. - Chuỗi này được lưu trữ trong
dt
. - Chúng ta in chuỗi này, điều này mang lại cho chúng ta một ngày và giờ dễ đọc.
Rất tốt hơn phải không? Bạn sẽ thấy điều gì đó như "Ngày và giờ địa phương hiện tại là: Tue Jun 22 15:30:45 2023".
Định Dạng Thời Gian Sử Dụng struct tm
Trong khi ctime()
rất tiện lợi, đôi khi chúng ta cần có nhiều kiểm soát hơn đối với định dạng ngày và giờ của mình. Đây là nơi struct tm
trở nên hữu ích. Nó là một cấu trúc phân tách thời gian thành các thành phần của nó (năm, tháng, ngày, giờ, v.v.).
Hãy xem cách sử dụng nó:
#include <iostream>
#include <ctime>
int main() {
time_t now = time(0);
tm *ltm = localtime(&now);
std::cout << "Năm: " << 1900 + ltm->tm_year << std::endl;
std::cout << "Tháng: " << 1 + ltm->tm_mon << std::endl;
std::cout << "Ngày: " << ltm->tm_mday << std::endl;
std::cout << "Giờ: " << ltm->tm_hour << ":";
std::cout << ltm->tm_min << ":";
std::cout << ltm->tm_sec << std::endl;
return 0;
}
Hãy mở rộng điều này:
- Chúng ta sử dụng
localtime()
để chuyển đổi giá trịtime_t
của chúng ta thành một cấu trúctm
. - Chúng ta sau đó có thể truy cập các thành phần riêng của ngày và giờ bằng cách sử dụng các thành viên của cấu trúc.
- Lưu ý rằng chúng ta cần thêm 1900 vào
tm_year
vì nó đếm năm kể từ 1900. - Chúng ta thêm 1 vào
tm_mon
vì tháng được số hóa từ 0-11 trong cấu trúc này.
Điều này mang lại cho chúng ta nhiều linh hoạt hơn trong việc trình bày thông tin ngày và giờ.
Tùy Chọn Định Dạng
Bây giờ khi chúng ta biết cách truy cập các thành phần riêng của một ngày và giờ, hãy xem xét một số tùy chọn định dạng phổ biến:
Định dạng | Mô tả | Ví dụ |
---|---|---|
%Y | Năm (4 chữ số) | 2023 |
%y | Năm (2 chữ số) | 23 |
%m | Tháng (01-12) | 06 |
%d | Ngày trong tháng (01-31) | 22 |
%H | Giờ trong định dạng 24h (00-23) | 15 |
%I | Giờ trong định dạng 12h (01-12) | 03 |
%M | Phút (00-59) | 30 |
%S | Giây (00-59) | 45 |
%p | Định dạng AM hoặc PM | PM |
Hãy đặt các tùy chọn này vào sử dụng:
#include <iostream>
#include <ctime>
#include <iomanip>
int main() {
time_t now = time(0);
tm *ltm = localtime(&now);
std::cout << "Định dạng tùy chỉnh: "
<< std::put_time(ltm, "%Y-%m-%d %I:%M:%S %p")
<< std::endl;
return 0;
}
Trong ví dụ này:
- Chúng ta bao gồm header
<iomanip>
chostd::put_time
. - Chúng ta sử dụng
std::put_time
để định dạng thời gian theo các specifier chúng ta cung cấp. - Điều này sẽ xuất ra điều gì đó như "2023-06-22 03:30:45 PM".
Kết Luận
Xin chúc mừng! Bạn đã bước ra đầu tiên vào thế giới của việc thao tác ngày và giờ trong C++. Chúng ta đã bao gồm cách lấy thời gian hiện tại, chuyển đổi nó thành một chuỗi dễ đọc, truy cập các thành phần riêng và thậm chí tạo ra các định dạng tùy chỉnh.
Nhớ rằng, làm việc với ngày và giờ có thể gây khó khăn (hãy nghĩ về múi giờ, thời gian thường và tháng 2 nhuận...), nhưng những kiến thức cơ bản này sẽ rất hữu ích trong hầu hết các tình huống. Khi bạn tiếp tục hành trình C++ của mình, bạn sẽ khám phá các kỹ thuật và thư viện tiên tiến hơn cho việc xử lý các hoạt động ngày và giờ phức tạp.
Hãy tiếp tục tập luyện, giữ được sự tò mò và đặc biệt là hãy vui chơi khi mã hóa! Ai biết, có lẽ một ngày nào đó bạn sẽ viết mã cho máy du hành thời gian tiếp theo lớn. Cho đến khi đó, hãy giữ cho trình biên dịch của bạn nóng và lỗi cú pháp của bạn lạnh!
Credits: Image by storyset