Trong bài viết này, mình sẽ đưa ra những cách để lấy thời gian hiện tại của hệ thống trong ngôn ngữ lập trình C. Những cách trong bài viết này đều là những cách mình đã sử dụng qua, mình có đính kèm liên kết để các bạn có thể tìm hiểu thêm về vấn đề này ở bên dưới.

Trước khi đi vào vấn đề chính, ta sẽ tìm hiểu sơ qua về struct tm:

struct tm
{
    int tm_sec;   // giây - [0, 60] bao gồm cả giây nhuận
    int tm_min;   // phút - [0, 59]
    int tm_hour;  // giờ - [0, 23]
    int tm_mday;  // ngày - [1, 31]
    int tm_mon;   // tháng - [0, 11]
    int tm_year;  // năm kể từ 1900
    int tm_wday;  // thứ bắt đầu từ Chủ nhật - [0, 6]
    int tm_yday;  // days since January 1 - [0, 365]
    int tm_isdst; // daylight savings time flag
};

Lưu ý: Như vậy để lấy năm hiện tại thì giá trị của tm_year ta phải cộng thêm 1900, còn đối với việc lấy tháng thì giá trị của tm_mon phải cộng thêm 1

Các cách lấy thời gian hiện tại

Cần phải include thư viện time.h

Cách thứ nhất
#include<time.h>
#include<stdio.h>
#include<conio.h>

void main(){

	time_t current_time;
    time(¤t_time);
    printf("%s", ctime(¤t_time));

	_getch();
}

Kết quả trả về sẽ có dạng như sau:

Sat Jun 05 23:06:48 2021
Cách thứ hai
#include<time.h>
#include<stdio.h>
#include<conio.h>

void main(){

	time_t rawtime;
    struct tm * timeinfo;
    time (&rawtime);
    timeinfo = localtime(&rawtime);

	printf("%d/%d/%d - %d:%d:%d", timeinfo->tm_mday, timeinfo->tm_mon + 1, timeinfo->tm_year + 1900, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);

	_getch();
}

Kết quả trả về sẽ có dạng như sau:

5/6/2021 - 23:12:30
Các cách khác

Các bạn có thể tham khảo thêm tại đây: https://stackoverflow.com/questions/5141960/get-the-current-time-in-c/31646117

Đối với chuẩn C11 trở đi ( trong Visual Studio )

Khi bạn lập trình trong Visual Studio thì nếu bạn dùng các đoạn code bên trên thì khả năng cao sẽ bị báo lỗi. Lúc này Visual Studio sẽ bắt bạn phải thay đổi bằng các hàm an toàn hơn ( ví dụ như: localtime -> localtime_s ). Trong trường hợp sẽ thường có 2 cách giải quyết:

  • Tắt SDL Checks
  • Tuân thủ theo chuẩn mà Visual Studio yêu cầu

Nếu như bạn tuân thủ theo chuẩn mà Visual Studio yêu cầu, thì 2 cách bên trên sẽ được viết lại như sau:

Cách thứ nhất
#include<time.h>
#include<stdio.h>
#include<conio.h>

void main(){

	time_t current_time;
    time(¤t_time);
	char buffer[30];
	ctime_s(buffer, sizeof(buffer), ¤t_time);
	printf("%s", buffer);

	_getch();
}
Cách thứ hai
#include<time.h>
#include<stdio.h>
#include<conio.h>

void main(){

	time_t rawtime;
    struct tm timeinfo;
    time (&rawtime);
	localtime_s(&timeinfo, &rawtime);

	printf("%d/%d/%d - %d:%d:%d", timeinfo.tm_mday, timeinfo.tm_mon + 1, timeinfo.tm_year + 1900, timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec);
  
	_getch();
}

Bài viết xin được phép kết thúc tại đây. Cảm ơn các bạn đã xem bài viết, hãy để lại bình luận góp ý cho mình nhé!

Được phân loại: