C ++ Ngày và Giờ

Thư viện chuẩn C ++ không cung cấp kiểu ngày tháng thích hợp. C ++ kế thừa các cấu trúc và hàm cho thao tác ngày và giờ từ C. Để truy cập các hàm và cấu trúc liên quan đến ngày và giờ, bạn cần phải bao gồm tệp tiêu đề <ctime> trong chương trình C ++ của mình.

Có bốn loại liên quan đến thời gian: clock_t, time_t, size_ttm. Các kiểu - clock_t, size_t và time_t có khả năng biểu diễn ngày và giờ của hệ thống dưới dạng một số loại số nguyên.

Loại cấu trúc tm giữ ngày và giờ ở dạng cấu trúc C có các phần tử sau:

struct tm {
   int tm_sec;   // seconds of minutes from 0 to 61
   int tm_min;   // minutes of hour from 0 to 59
   int tm_hour;  // hours of day from 0 to 24
   int tm_mday;  // day of month from 1 to 31
   int tm_mon;   // month of year from 0 to 11
   int tm_year;  // year since 1900
   int tm_wday;  // days since sunday
   int tm_yday;  // days since January 1st
   int tm_isdst; // hours of daylight savings time
}

Sau đây là các hàm quan trọng, chúng tôi sử dụng khi làm việc với ngày và giờ trong C hoặc C ++. Tất cả các hàm này là một phần của thư viện C và C ++ chuẩn và bạn có thể kiểm tra chi tiết của chúng bằng cách sử dụng tham chiếu đến thư viện chuẩn C ++ được cung cấp bên dưới.

Sr.No Chức năng & Mục đích
1

time_t time(time_t *time);

Điều này trả về thời gian lịch hiện tại của hệ thống theo số giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970. Nếu hệ thống không có thời gian, thì .1 được trả về.

2

char *ctime(const time_t *time);

Điều này trả về một con trỏ đến một chuỗi có dạng ngày tháng năm giờ: phút: giây năm \ n \ 0 .

3

struct tm *localtime(const time_t *time);

Điều này trả về một con trỏ đến tm cấu trúc đại diện cho giờ địa phương.

4

clock_t clock(void);

Giá trị này trả về một giá trị gần đúng với khoảng thời gian mà chương trình gọi đã chạy. Giá trị .1 được trả về nếu thời gian không khả dụng.

5

char * asctime ( const struct tm * time );

Điều này trả về một con trỏ đến một chuỗi chứa thông tin được lưu trữ trong cấu trúc được trỏ tới theo thời gian được chuyển đổi thành dạng: ngày tháng ngày giờ: phút: giây năm \ n \ 0

6

struct tm *gmtime(const time_t *time);

Điều này trả về một con trỏ đến thời gian ở dạng cấu trúc tm. Thời gian được biểu thị bằng Giờ phối hợp quốc tế (UTC), về cơ bản là Giờ trung bình Greenwich (GMT).

7

time_t mktime(struct tm *time);

Điều này trả về lịch-thời gian tương đương với thời gian được tìm thấy trong cấu trúc được trỏ đến theo thời gian.

số 8

double difftime ( time_t time2, time_t time1 );

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

9

size_t strftime();

Chức năng này có thể được sử dụng để định dạng ngày và giờ theo một định dạng cụ thể.

Ngày và giờ hiện tại

Giả sử bạn muốn truy xuất ngày và giờ hệ thống hiện tại, dưới dạng giờ địa phương hoặc là Giờ Phối hợp Quốc tế (UTC). Sau đây là ví dụ để đạt được điều tương tự -

#include <iostream>
#include <ctime>

using namespace std;

int main() {
   // current date/time based on current system
   time_t now = time(0);
   
   // convert now to string form
   char* dt = ctime(&now);

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

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

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

The local date and time is: Sat Jan  8 20:07:41 2011

The UTC date and time is:Sun Jan  9 03:07:41 2011

Định dạng thời gian sử dụng struct tm

Các tmcấu trúc rất quan trọng khi làm việc với ngày và giờ trong C hoặc C ++. Cấu trúc này giữ ngày và giờ ở dạng cấu trúc C như đã nói ở trên. Hầu hết các chức năng liên quan đến thời gian sử dụng cấu trúc tm. Sau đây là một ví dụ sử dụng các hàm khác nhau liên quan đến ngày giờ và cấu trúc tm -

Trong khi sử dụng cấu trúc trong chương này, tôi giả định rằng bạn đã hiểu cơ bản về cấu trúc C và cách truy cập các thành viên cấu trúc bằng toán tử arrow ->.

#include <iostream>
#include <ctime>

using namespace std;

int main() {
   // current date/time based on current system
   time_t now = time(0);

   cout << "Number of sec since January 1,1970 is:: " << now << endl;

   tm *ltm = localtime(&now);

   // print various components of tm structure.
   cout << "Year:" << 1900 + ltm->tm_year<<endl;
   cout << "Month: "<< 1 + ltm->tm_mon<< endl;
   cout << "Day: "<< ltm->tm_mday << endl;
   cout << "Time: "<< 5+ltm->tm_hour << ":";
   cout << 30+ltm->tm_min << ":";
   cout << ltm->tm_sec << endl;
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Number of sec since January 1,1970 is:: 1588485717
Year:2020
Month: 5
Day: 3
Time: 11:31:57