C++: Bài 27. Date và Time

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

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 khai báo tệp tiêu đề <ctime> trong chương trình C++ của mình.

Có bốn kiểu liên quan đến thời gian: clock_t, time_t, size_t và tm. 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.

Kiểu struct tm chứa ngày và giờ ở dạng cấu trúc C có các phần tử sau:

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

Sau đây là các hàm quan trọng, ta 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.

Chức năng & Mục đích

time_t time(time_t *time);

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ề.

char *ctime(const time_t *time);

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.

struct tm *localtime(const time_t *time);

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

clock_t clock(void);

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.

char *asctime(const struct tm *time);

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ỏ đến 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

struct tm *gmtime(const time_t *time);

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).

time_t mktime(struct tm *time);

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.

double difftime(time_t time2, time_t time1);

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

size_t strftime();

Đị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() {
  // date/time của hệ thống hiện thời
  time_t now = time(0);

  // chuyển thành dạng chuỗi
  char* dt = ctime(&now);

  cout << "Ngay thang va thoi gian dia phuong: " << dt << endl;

  // chuyển sang dạng struct tm UTC
  tm *gmtm = gmtime(&now);
  dt = asctime(gmtm);
  cout << "Ngay thang va thoi gian UTC: " << dt << endl;
}

Kết quả:

Ngay thang va thoi gian dia phuong: Sat Dec 05 23:14:10 2020

Ngay thang va thoi gian UTC: Sat Dec 05 16:14:10 2020

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

struct tm là rất quan trọng khi làm việc với ngày tháng và thời gian 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 hàm ở trên liên quan đến thời gian sử dụng struct 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à struct tm.

Giả sử bạn đã nắm được cách sử dụng struct thì ví dụ sau sẽ nói về việc truy cập các thành phần của struct bằng toán tử arrow ->.

#include <iostream>
#include <ctime>

using namespace std;

int main() {
  // lấy date/time hiện thời của hệ thống
  time_t now = time(0);

  cout << "So luong giay tinh tu ngay 1/1/1970 la: " << now << endl;

  tm *ltm = localtime(&now);

  // in ra cac thanh phan khac nhau cua struct tm:
  cout << "Nam: " << 1900 + ltm->tm_year<<endl;
  cout << "Thang: "<< 1 + ltm->tm_mon<< endl;
  cout << "Ngay: "<< ltm->tm_mday << endl;
  cout << "Thoi gian: "<< 5+ltm->tm_hour << ":";
  cout << 30+ltm->tm_min << ":";
  cout << ltm->tm_sec << endl;

  return 0;
}

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

So luong giay tinh tu ngay 1/1/1970 la: 1607185368
Nam: 2020
Thang: 12
Ngay: 5
Thoi gian: 28:52:48
» Tiếp: Bài 28. Input và Output
« Trước: Bài 26. Xử lý số
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!