Hàm mktime() trong C
Trong bài này, mình sẽ tập trung vào hàm mktime()
, một trong những hàm quan trọng nhất trong thư viện time.h
. Hàm mktime()
trong C được sử dụng để chuyển đổi các thông tin về thời gian trong cấu trúc struct tm
thành số giây tính từ Epoch (thời điểm bắt đầu của hệ thống Unix). Mình sẽ tìm hiểu về cú pháp, cách sử dụng và các ví dụ minh họa để hiểu rõ hơn về hàm này và cách nó hoạt động.
Hàm mktime() trong C
Cú pháp tổng quát của hàm mktime()
time_t mktime(struct tm *timeptr);
Các tham số đầu vào của hàm mktime()
timeptr
: Con trỏ đến một cấu trúc struct tm chứa thông tin về thời gian.
Giá trị trả về của hàm mktime()
- Hàm trả về số giây tính từ Epoch cho thời điểm được đại diện bởi cấu trúc struct tm. Trong trường hợp không thể chuyển đổi, giá trị trả về là -1.
Ví dụ:
#include <stdio.h> #include <time.h> int main() { struct tm timeinfo = {0}; timeinfo.tm_year = 2023 - 1900; // Năm 2023 timeinfo.tm_mon = 3 - 1; // Tháng 3 (index từ 0) timeinfo.tm_mday = 20; // Ngày 20 //Bài viết này được đăng tại freetuts.net time_t seconds = mktime(&timeinfo); if (seconds != -1) { printf("Số giây tính từ Epoch cho ngày 20/03/2023: %ld\n", seconds); } else { printf("Không thể chuyển đổi thời gian.\n"); } return 0; }
Output:
Số giây tính từ Epoch cho ngày 20/03/2023: 1679654400
Trong ví dụ này, mình sử dụng hàm mktime()
để chuyển đổi thông tin về thời gian được lưu trữ trong cấu trúc struct tm
thành số giây tính từ Epoch. Sau đó,mình in ra số giây tính được để kiểm tra kết quả.
Cách sử dụng hàm mktime() trong C
Sử dụng hàm mktime() để chuyển đổi struct tm thành giây tính từ Epoch
#include <stdio.h> #include <time.h> //Bài viết này được đăng tại freetuts.net int main() { // Tạo một cấu trúc struct tm chứa thông tin về thời gian struct tm timeinfo = {0}; timeinfo.tm_year = 2023 - 1900; // Năm 2023 timeinfo.tm_mon = 3 - 1; // Tháng 3 (index từ 0) timeinfo.tm_mday = 20; // Ngày 20 // Chuyển đổi cấu trúc struct tm thành giây tính từ Epoch time_t seconds = mktime(&timeinfo); //Bài viết này được đăng tại freetuts.net // In ra số giây tính được printf("Số giây tính từ Epoch cho ngày 20/03/2023: %ld\n", seconds); return 0; }
Áp dụng hàm mktime() để tạo ra thời gian hiện tại
#include <stdio.h> #include <time.h> int main() { // Khai báo biến time_t để lưu giá trị thời gian hiện tại time_t current_time; //Bài viết này được đăng tại freetuts.net // Sử dụng hàm time() để lấy thời gian hiện tại current_time = time(NULL); //Bài viết này được đăng tại freetuts.net // In ra thời gian hiện tại dưới dạng số giây tính từ Epoch printf("Thời gian hiện tại tính từ Epoch: %ld\n", current_time); return 0; }
Output:
Số giây tính từ Epoch cho ngày 20/03/2023: 1679654400 Thời gian hiện tại tính từ Epoch: 1694381131
Trong ví dụ trên:
- Ở phần A, mình tạo một cấu trúc struct tm chứa thông tin về thời gian và sử dụng hàm mktime() để chuyển đổi cấu trúc này thành số giây tính từ Epoch.
- Ở phần B, mình sử dụng hàm time() để lấy thời gian hiện tại dưới dạng số giây tính từ Epoch.
Ví dụ về sử dụng các hàm mktime() trong C
Sử dụng hàm mktime() để tính toán khoảng thời gian giữa hai ngày
#include <stdio.h> #include <time.h> //Bài viết này được đăng tại freetuts.net int main() { // Tạo cấu trúc tm cho ngày bắt đầu struct tm start_time = {0}; start_time.tm_year = 2023 - 1900; // Năm 2023 start_time.tm_mon = 3 - 1; // Tháng 3 (index từ 0) start_time.tm_mday = 20; // Ngày 20 // Chuyển đổi ngày bắt đầu thành giây từ Epoch time_t start_seconds = mktime(&start_time); // Tạo cấu trúc tm cho ngày kết thúc struct tm end_time = {0}; end_time.tm_year = 2023 - 1900; // Năm 2023 end_time.tm_mon = 4 - 1; // Tháng 4 (index từ 0) end_time.tm_mday = 15; // Ngày 15 //Bài viết này được đăng tại freetuts.net // Chuyển đổi ngày kết thúc thành giây từ Epoch time_t end_seconds = mktime(&end_time); // Tính khoảng thời gian giữa hai ngày double diff_seconds = difftime(end_seconds, start_seconds); // In ra kết quả printf("Khoảng thời gian giữa ngày 20/03/2023 và ngày 15/04/2023: %.0f giây\n", diff_seconds); return 0; }
Áp dụng hàm mktime() để hiển thị thời gian cục bộ
#include <stdio.h> #include <time.h> int main() { // Lấy thời gian hiện tại dưới dạng số giây tính từ Epoch time_t current_time = time(NULL); // Chuyển đổi thời gian hiện tại thành cấu trúc tm địa phương struct tm *local_time = localtime(¤t_time); //Bài viết này được đăng tại freetuts.net // In ra thời gian cục bộ printf("Thời gian cục bộ hiện tại: %s\n", asctime(local_time)); return 0; }
Output:
Khoảng thời gian giữa ngày 20/03/2023 và ngày 15/04/2023: 2419200 giây Thời gian cục bộ hiện tại: Wed Sep 7 14:38:46 2022
Trong ví dụ này:
- Ở phần A, mình sử dụng hàm
mktime()
để chuyển đổi các thông tin thời gian của hai ngày thành số giây tính từ Epoch, sau đó sử dụng hàmdifftime()
để tính khoảng thời gian giữa chúng. - Ở phần B, mình sử dụng hàm
mktime()
để chuyển đổi thời gian hiện tại thành thời gian cục bộ và in ra màn hình.
Kết bài
Trong bài này, mình đã tìm hiểu về một trong những hàm quan trọng nhất trong thư viện time.h, đó là hàm mktime()
. Mình đã biết cách sử dụng hàm này để chuyển đổi thông tin thời gian từ cấu trúc struct tm sang số giây tính từ Epoch, và cách áp dụng nó trong các tình huống thực tế như tính toán khoảng thời gian giữa hai ngày và hiển thị thời gian cục bộ.
Hy vọng rằng bài này đã cung cấp cho bạn cái nhìn tổng quan về cách sử dụng hàm mktime()
và các hàm xử lý thời gian khác trong C.
Bài giải
-------------------- ######## --------------------
Câu hỏi thường gặp liên quan:
- Hàm time() trong C
- Hàm ctime() trong C
- Hàm localtime() trong C
- Hàm difftime() trong C
- Hàm strftime() trong C
- Hàm mktime() trong C
- Hàm asctime() trong C
- Hàm gmtime() trong C
- Hàm clock() trong C