Để tìm hiểu chi tiết về Date và Time trong C++ là gì, bạn đọc cùng tham khảo tiếp bài viết dưới đây của Taimienphi.vn.
C++ kế thừa các kiểu dữ liệu cho time từ ngôn ngữ lập trình C. Để sử dụng kiểu dữ liệu này, trong chương trình chúng ta phải thêm header ctime:
#include
Header này cung cấp 4 kiểu dữ liệu khác nhau, sử dụng để biểu diễn time:
clock_t: Kiểu Clock.
size_t: Kiểu Unsigned Integral.
time_t: Kiểu Time.
struct tm: Cấu trúc Time.
Trong đó 3 kiểu dữ liệu đầu tiên biểu diễn thời gian dưới dạng số nguyên, chúng ta cần chuyển đổi các số nguyên này sang dạng biểu diễn time phổ biến.
Cách đơn giản nhất là sử dụng cấu trúc struct tm. Dưới đâylà bảng danh sách tm biểu diễn cho time:
Trường Kiểu Mô tả Phạm vi
tm_sec int Giây 0 - 61
tm_min int Phút 0 - 59
tm_hour int Giờ 0 - 23
tm_mday int Ngày của tháng 1 - 31
tm_mon int Tháng kể từ tháng 1 0 - 11
tm_year int Năm kể từ năm 1900
tm_wday int Ngày kể từ Chủ nhật 0 - 6
tm_yday int Ngày kể từ 1/1 0 - 365
Để sử dụng biến kiểu tm, bạn có thể khai báo tượng tự như cách khai báo biến bất kỳ:
tm my_time;
Header ctime cung cấp một loạt các hàm hữu ích để làm việc với các kiểu dữ liệu:
- char* asctime (const struct tm * timeptr); chuyển đổi con trỏ thành struct tm thành một mảng ký tự (char).
- char* ctime (const time_t * timer); chuyển đổi giá trị của time_t thành mảng char theo định dạng Www Mmm dd hh:mm:ss yyyy (trong đó Www là ngày thường trong tuần, Mmm là tháng, dd là ngày trong tuần, dd là ngày, mm là phút, ss là giây, hh là giờ, yyyy là năm).
- struct tm * gmtime (const time_t * timer); chuyển đổi giá trị time_t thành struct tm dưới dạng thời gian UTC.
- struct tm * localtime (const time_t * timer); chuyển đổi giá trị time_t thành struct tm theo định dạng thời gian cục bộ.
- size_t strftime (char* ptr, size_t maxsize, const char* format, const struct tm* timeptr ); hàm này sao chép giá trị thời gian của timeptr theo định dạng mảng char ptr có kích thước tối đa.
Các specifier chính được chỉ định cho hàm này bao gồm:
Specifier Mô tả
%a Tên ngày viết tắt
%A Tên ngày đầy đủ
%b Tên tháng viết tắt
%B Tên tháng đầy đủ
%c Biểu diễn ngày và giờ
%C Năm chia cho 100 và làm tròn thành số nguyên (00-99)
%d Ngày trong tháng có 2 chữ số (01-31)
%D Định dạng ngày MM/DD/YY, tương đương với %m/%d/%y
%e Ngày trong tháng đệm dấu cách ( 1-31)
%F Định dạng ngày YYYY-MM-DD, tương đương %Y-%m-%d
%g Tuần trong năm, hai chữ số cuối (00-99)
%G Tuần trong năm
%h Tên tháng viết tắt (giống %b)
%H Định dạng 24 giờ (00-23)
%I Định dạng 12 giờ (01 - 12)
%j Ngày trong năm (001-366)
%m Tháng dưới dạng số thập phân (01-12)
%M Phút (00 - 59)
%p Ký hiệu AM hoặc PM
%R Định dạng giờ 24 giờ HH:MM, tương đương %H:%M
%S Giây (00 - 61)
- clock_t clock (void); trả về thời gian mà chương trình đã sử dụng từ lúc khởi chạy. Giá trị trả về là số nhịp (tích tắc) đồng hồ. Bạn có thể chuyển đổi giá trị này sang giây bằng cách sử dụng hằng số CLOCKS_PER_SEC.
- time_t mktime (struct tm * timeptr); chuyển đổi cấu trúc tm sang time_t.
- time_t time (time_t* timer); lấy thời gian hiện tại ở định dạng time_t bằng cách sử dụng timer. Chúng ta có thể sử dụng NULL làm tham số cho hàm này: time (NULL).
Nếu sử dụng các hàm trên với trình biên dịch hiện đại, bạn sẽ được trả về một thông báo lỗi:
"lỗi C4996: 'ctime': Hàm hoặc biến này có thể không an toàn. Thay vào đó, chúng ta có thể sử dụng ctime_s. Để vô hiệu hóa lỗi, chúng ta sử dụng _CRT_SECURE_NO_WARNINGS".
Trong trường hợp nếu chắc chắn chương trình an toàn, chúng ta có thể vô hiệu hóa lỗi bằng cách sử dụng lệnh dưới đây:
#pragma warning(disable : 4996)
Dưới đây là chương trình demo minh họa cách sử dụng time với các hàm đưuọc mô tả:
//lấy giá trị bắt đầu của đồng hồ
clock_t bắt đầu = clock();
tm* my_time;
//lấy giờ hiện tại theo định dạng time_t
time_t t = time(NULL);
//hiển thị giá trị lưu trữ trong t
cout < "giá="" trị="" của="" t="" "="">< t=""><>
//chuyển đổi time_t sang char*
char* charTime = ctime(&t);
//hiển thị giờ hiện tại
cout < "hiện="" tại="" là="" "="">< chartime=""><>
//chuyển đổi t time_t sang tm
my_time = localtime(&t);
//chỉ lấy giờ và phút
char* hhMM = new char[6];
strftime(hhMM, 6, "HH:MM", my_time);
//hiển thị một phần của tm struct
//toán tử -> được sử dụng để truy cập thành viên của tm struct, được mô tả trong cấu trúc dữ liệu
cout < "năm="" "="">< 1900="" +="" my_time-="">tm_year <>
cout < "tháng="" "="">< my_time-="">tm_mon <>
clock_t end = clock();
clock_t exec = end - start;
cout < "chương="" trình="" được="" thực="" thi="" trong"="">< exec="">< "="" clocks="" or="">
< 1000="" *="" exec="" clocks_per_sec="">< "="" milliseconds"=""><>
cin.ignore();
- Kết quả đầu ra của chương trình có dạng:
Giá trị của t 1417965525
Bây giờ là chủ nhật ngày 07/12 17:18:45 2014
Năm 2014
Tháng 11
Chương trình được thực thi trong 6 đồng hồ hoặc 6 mili giây
Bài viết trên đây Taimienphi.vn vừa giới thiệu cho bạn về Date và Time trong C++ là gì. Ngoài ra bạn đọc có thể tham khảo thêm một số bài viết đã có trên Taimienphi.vn để tìm hiểu thêm về chuỗi (string) trong C++, ngoài các nội dung về vòng lặp, mảng, tham chiếu,.. thì chuỗi trong C cũng là một nội dung vô cùng quan trọng.