Trong lập trình c ++, ngày và giờ là những khái niệm quan trọng mà chúng ta cần nắm vững. Bài viết này sẽ giới thiệu cho bạn kiến thức căn bản về ngày và giờ trong lập trình C++, giúp bạn hiểu rõ hơn về chúng và sử dụng chúng một cách hiệu quả.
1. Ngày và Giờ trong C++
ngôn ngữ lập trình c ++ thừa hưởng kiểu dữ liệu thời gian từ ngôn ngữ C. Để sử dụng kiểu dữ liệu này, chúng ta cần bao gồm thư viện ctime
.
Thư viện này định nghĩa 4 kiểu dữ liệu khác nhau để biểu diễn thời gian:
-
clock_t
: Loại dữ liệu đồng hồ. -
size_t
: Loại dữ liệu số nguyên không dấu. -
time_t
: Loại dữ liệu thời gian. -
struct tm
: Cấu trúc thời gian.
Trong số đó, ba kiểu dữ liệu đầu tiên đại diện cho thời gian dưới dạng số nguyên, chúng ta cần chuyển đổi những số nguyên này thành biểu diễn thời gian phổ biến.
Phương pháp đơn giản nhất là sử dụng cấu trúc struct tm
. Dưới đây là bảng liệt kê tm
đại diện cho thời gian:
Trường | Kiểu | Mô tả | Phạm vi |
---|---|---|---|
tm_sec | int | Giây | 0 - 61 |
tm_min | int | Phút | 0 - 59 |
tm_hour | int | Giờ | 0 - 23 |
tm_mday | int | Ngày trong tháng | 1 - 31 |
tm_mon | int | Tháng, bắt đầu từ tháng 1 | 1 - 12 |
tm_year | int | Năm, tính từ năm 1900 | - |
tm_wday | int | Thứ trong tuần, tính từ Chủ nhật | 0 - 6 |
tm_yday | int | Ngày trong năm, tính từ 1/1 | 0 - 365 |
Để sử dụng biến kiểu tm
, bạn có thể khai báo giống như cách khai báo bất kỳ biến nào khác:
tm my_time;
Header ctime
cung cấp nhiều hàm hữu ích để thao tác với các kiểu dữ liệu thời gian:
-
char* asctime (const struct tm * timeptr)
: chuyển đổistruct tm
thành chuỗi ký tự (char). -
char* ctime (const time_t * timer)
: chuyển đổi giá trịtime_t
thành chuỗi char với định dạng Www Mmm dd hh:mm:ss yyyy. -
struct tm * gmtime (const time_t * timer)
: chuyển đổi giá trịtime_t
thànhstruct tm
đại diện cho thời gian theo Coordinated Universal Time (UTC). -
struct tm * localtime (const time_t * timer)
: chuyển đổi giá trịtime_t
thànhstruct tm
theo định dạng thời gian cục bộ. -
size_t strftime (char* ptr, size_t maxsize, const char* format, const struct tm* timeptr )
: hàm này sao chép giá trị thời gian củatimeptr
theo định dạng mảngchar ptr
với kích thước tối đa làmaxsize
.
Các specifier chính được sử dụng cho hàm này bao gồm:
Specifier | Mô tả |
---|---|
%a | Tên ngày viết tắt |
%A | Tên ngày đầy đủ |
%b | Tên tháng theo cách viết ngắn gọn |
%B | Tên tháng toàn vẹn |
%c | Hiển thị ngày và giờ |
%C | Năm chia cho 100 và làm tròn thành số nguyên (00-99) |
%d | Ngày trong tháng với 2 chữ số (01-31) |
%D | Định dạng ngày là MM/DD/YY, tương đương với %m/%d/%y |
%e | Ngày trong tháng với khoảng trắng ở đầu (1-31) |
%F | Định dạng ngày là YYYY-MM-DD, tương đương %Y-%m-%d |
%g | Số tuần trong năm, hai chữ số cuối (00-99) |
%G | Số hiệu của tuần trong năm |
%h | Tên rút gọn của tháng (giống %b) |
%H | Định dạng 24 giờ (00-23) |
%I | Định dạng 12 giờ (01 - 12) |
%j | Số ngày trong năm (001-366) |
%m | Tháng dưới dạng số thập phân (01-12) |
%M | Phút (00 - 59) |
%p | Biểu tượng AM hoặc PM |
%R | Định dạng giờ 24 giờ HH:MM, tương đương %H:%M |
%S | Giây (00 - 61) |
Ngoài ra, thư viện ctime
còn cung cấp các hàm khác như:
-
clock_t clock (void)
: trả về thời gian mà chương trình đã sử dụng từ lúc khởi chạy. Giá trị trả về là số nhịp (tích tắc) đồng hồ. Bạn có thể chuyển đổi giá trị này sang giây bằng cách sử dụng hằng sốCLOCKS_PER_SEC
. -
time_t mktime (struct tm * timeptr)
: chuyển đổi cấu trúctm
sangtime_t
. -
time_t time (time_t* timer)
: lấy thời gian hiện tại ở định dạngtime_t
bằng cách sử dụng timer. Chúng ta có thể sử dụng NULL làm tham số cho hàm này:time(NULL)
.
Lưu ý, nếu sử dụng các hàm trên với trình biên dịch hiện đại, bạn sẽ được trả về một thông báo lỗi. Để vô hiệu hóa lỗi, bạn có thể sử dụng lệnh #pragma warning(disable : 4996)
.
2. Ví dụ về Date và Time trong C++
Dưới đây là chương trình minh họa cách sử dụng thư viện time
với các hàm đã được mô tả trước đó:
//lấy giá trị khởi đầu của đồng hồ // Bắt đầu đồng hồ tm* thoi_gian_cua_toi; // Lấy thời gian hiện tại dưới định dạng time_t time_t thoi_diem = time(NULL); // Hiển thị giá trị lưu trữ trong t cout << "Giá trị của t là" << t << endl; // Chuyển đổi time_t sang char* char* kyTuThoiGian = ctime(&t); // Hiển thị giờ hiện tại cout << "Thời điểm hiện tại là: " << kyTuThoiGian << endl; // Chuyển đổi t từ time_t sang tm my_time = localtime(&t); // Chỉ lấy thông tin về giờ và phút char* gioPhut = new char[6]; strftime(gioPhut, 6, "HH:MM", my_time); // Hiển thị một phần của cấu trúc thời gian (tm) // Toán tử -> được dùng để truy cập các thành viên của cấu trúc tm, như được mô tả trong cấu trúc dữ liệu cout << "Năm: " << 1900 + my_time->tm_year << endl; cout << "Tháng: " << my_time->tm_mon + 1 << endl; clock_t ketthuc = clock(); clock_t thucthi = ketthuc - batdau; cout << "Chương trình được thực thi trong " << thucthi << " đơn vị nhịp đồng hồ hoặc " << thucthi * 1000 / CLOCKS_PER_SEC << " miligiây" << endl; cin.ignore(); // Bạn có thể thêm mã của bạn ở đây
Kết quả xuất ra từ chương trình có dạng:
Giá trị của biến t là 1417965525 Hiện tại là Chủ nhật, ngày 07/12, lúc 17:18:45 năm 2014 Năm 2014 Tháng Mười Một Chương trình được thực hiện trong vòng 6 giờ đồng hồ hoặc 6 mili giây
Bài viết này đã giới thiệu về khái niệm Date và Time trong ngôn ngữ lập trình c ++. Hi vọng qua bài viết này, bạn đã hiểu rõ hơn về cách sử dụng ngày và giờ trong lập trình C++. Bạn có thể áp dụng kiến thức này vào các dự án lập trình của mình.