C ++标准库未提供正确的日期类型. C ++从C继承了日期和时间操作的结构和函数.要访问与日期和时间相关的函数和结构,您需要包含< ctime> C ++程序中的头文件.
有四种与时间相关的类型: clock_t,time_t,size_t 和 tm .类型 - clock_t,size_t和time_t能够将系统时间和日期表示为某种整数.
结构类型 tm 包含日期和时间以C结构的形式,具有以下元素 :
struct tm { int tm_sec;//从0到61的分钟数 int tm_min;//从0到59的小时数 int tm_hour;//从0到24的每天小时 int tm_mday;//从1到31的每月一天 int tm_mon;//从0到11的一年中的一个月 int tm_year;//自1900年以来 int tm_wday;//星期天以来的日子 int tm_yday;//自1月1日起的天数 int tm_isdst;//夏令时的时间 }
以下是我们在使用C或C ++处理日期和时间时使用的重要函数.所有这些函数都是标准C和C ++库的一部分,您可以参考下面给出的C ++标准库来检查它们的详细信息.
Sr.No | 功能&目的 |
---|---|
1 | time_t time(time_t * time); 这将返回自1970年1月1日以来经过的秒数内系统的当前日历时间.如果系统没有时间,返回.1. |
2 | char * ctime(const time_t * time); 这将返回指向形式的字符串的指针日月份小时:分钟:秒年份\ n \\\ . |
3 | struct tm * localtime(const time_t * time); 返回指向 tm 结构的指针,表示当地时间. |
4 | clock_t clock(void); 这将返回一个值,该值近似于调用程序运行的时间.如果时间不可用,则返回值.1. |
5 | char * asctime(const struct tm * time); 返回指向字符串的指针,该字符串包含存储在转换为表单的时间所指向的结构中的信息:day month date hours:minutes:seconds year \\\ |
6 | struct tm * gmtime(const time_t * time); 这将以tm结构的形式返回指向时间的指针.时间以协调世界时(UTC)表示,基本上是格林威治标准时间(GMT). |
7 | time_t mktime(struct tm * time); 这将返回与时间指向的结构中找到的时间等效的日历时间. |
8 | double difftime(time_t time2,time_t time1); 此函数计算time1和time2之间的秒数差异. |
9 | size_t strftime(); 此函数可用于格式化具体格式的日期和时间. |
假设您要检索当前系统日期和时间,可以是本地时间,也可以是协调世界时(UTC).以下是实现相同的示例;
#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; }
编译并执行上述代码时,会产生以下结果 :
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
tm 结构在使用时非常重要C或C ++中的日期和时间.该结构以如上所述的C结构的形式保持日期和时间.大多数时候相关的函数都使用了tm结构.下面是一个使用各种日期和时间相关函数和tm结构的例子;
在本章中使用结构时,我假设您对C有基本的了解结构以及如何使用箭头访问结构成员 - >运营商.
#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:" << now << endl; tm *ltm = localtime(&now); // print various components of tm structure. cout << "Year" << 1970 + 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; }
编译并执行上述代码时,会产生以下结果 :
Number of sec since January 1, 1970:1294548238 Year: 2011 Month: 1 Day: 8 Time: 22: 44:59