5 Phút Tìm Hiểu Date Và Time Trong C++

Thư viện chuẩn của C++ không cung cấp một Date thích hợp. C++ được kế thừa các cấu trúc và chức năng cho việc thao tác với Date từ C. Để truy cập các funtionc liên quan đến Date and Time, bạn cần phải include <ctime> vào trong chương trình C++ của mình.

Có 4 loại kiểu time: lock_t, time_t, size_t, và tm.

Kiểu cấu trúc tm trong C có các thành phần như sau:

struct tm {
   int tm_sec;   // số giây trong một phút từ 1 - 61
   int tm_min;   // số phút trong một giờ từ 0 - 59
   int tm_hour;  // số giờ trong một ngày từ 0 - 24
   int tm_mday;  // số ngày trong tháng từ 1 - 31
   int tm_mon;   // số tháng trong năm 0 - 11
   int tm_year;  // năm, bắt đầu tính từ 1900
   int tm_wday;  // ngày, bắt đầu tính từ chủ nhật (sunday)
   int tm_yday;  // ngày, bắt đầu tính từ 1/1
   int tm_isdst; // số giờ của daylight savings time
}

Sau đây là các chức năng quan trọng trong khi làm việc với Date and Time trong C hoặc C++. Tất cả các function này là một phần của thư viện chuẩn C/C++ và chúng ta có thể kiểm tra chi tiết bởi sử dụng tham chiếu tới Thư viện chuẩn C++ được cung cấp dưới đây.

Function Name

Function Prototype

 Description

time

time_t time(time_t *time)

Trả về thời gian hiện tại của hệ thống, tính từ thời điểm ngày 1 tháng 1 năm 1970. Nếu hệ thống không có thời gian, function sẽ return về giá trị là -1

ctime
char *ctime(const time_t *time)

Trả về một con trỏ tới một string có format là: day month year hours:minutes:seconds year\n\0.

localtime

struct tm *localtime(const time_t *time)

Trả về một con trỏ tới cấu trúc tm biểu thị local time.

clock
clock_t clock(void);

Trả về một giá trị gần bằng lượng thời gian mà chương trình gọi đã chạy. Nếu không có giá trị nào được tìm thấy, function sẽ return giá trị là -1.

asctime
char * asctime ( const struct tm * time );

Chuyển đổi đối tượng thời gian của loại tm thành string và trả về một con trỏ đến chuỗi này. Có format là: day month date hours:minutes:seconds year\n\0

gmtine
struct tm *gmtime(const time_t *time);

Trả về thời gian hiện tại

mktime
time_t mktime(struct tm *time);

Trả về thời gian theo lịch tương đương với thời gian tìm thấy trong cấu trúc được chỉ theo thời gian.

difftime
double difftime ( time_t time2, time_t time1 );

Hàm này tính toán sự khác biệt về số giây giữa time1 và time2.

strftime
size_t strftime();

Hàm này có thể được sử dụng để định dạng Date and Time theo một định dạng cụ thể.

Current Date and Time

Đoạn code dưới đây sẽ cho chúng ta thấy cách để lấy được thời gian hiện tại theo local time và GMT time.

#include <iostream>
#include <ctime>

using namespace std;

int main() {
   // thời gian hiện tại tính theo hệ thống
   time_t now = time(0);
   
   // convert sang string
   char* dt = ctime(&now);

   cout << "The current local date and time is: " << dt << endl;

   // convert sang UTC
   tm *gmtm = gmtime(&now);
   dt = asctime(gmtm);
   cout << "The current UTC date and time is:"<< dt << endl;
}

Khi code trên được biên dịch và thực thi, sẽ cho ra kết quả như sau:

Format Time sử dụng cấu trúc tm struct

Cấu trúc tm struct rất quan trọng trong khi làm việc với Date and Time trong cả C và  C++. Cấu trúc này giữ cho Date and Time theo form của cấu trúc trong C mà mình đã nói ở trên. Hầu hết các chức năng liên quan đến date time đều sử dụng cấu trúc tm struct. Dưới đây là một ví dụ sử dụng các hàm và cấu trúc tm khác nhau liên quan đến Date and Time.

Ở bài viết này, tôi mặc định rằng các bạn đã có những hiểu biết cơ bản về cấu trúc C và cách sử dụng toán tử “->”.

#include <iostream>
#include <ctime>

using namespace std;

int main() {
   // thời gian hiện tại tính theo hệ thống
   time_t now = time(0);

   cout << "Number of sec since 1/1/1970:" << now << endl;

   tm *ltm = localtime(&now);

   // in ra các thành phần của cấu trúc tm struct
   cout << "Year: " << 1900 + ltm->tm_year << endl;
   cout << "Month: "<< 1 + ltm->tm_mon<< endl;
   cout << "Day: "<<  ltm->tm_mday << endl;
   cout << "Time: "<< 1 + ltm->tm_hour << ":";
   cout << 1 + ltm->tm_min << ":";
   cout << 1 + ltm->tm_sec << endl;
}

Khi code trên được biên dịch và thực thi, sẽ cho ra kết quả như sau:

Kết Luận

Qua bài viết này, mình đã giới thiệu đến các bạn các kiểu Date and Time trong C++. Hi vọng sau bài viết này, các bạn đã có thể hiểu và sử dụng Date and Time trong C++ một cách hiệu quả!