C++ 日期和时间

  • 日期和时间

    C++标准库没有提供适当的日期类型。C++从C继承了用于日期和时间操作的结构和函数。要访问与日期和时间相关的函数和结构,需要在C++程序中包含头文件。有四种与时间相关的类型:clock_t、time_t、size_t和tm。类型clock_t、size_t和time_t能够将系统时间和日期表示为某种整数。结构类型tm以C结构的形式保存日期和时间,其中包含以下元素−
    
    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
    }
    
    以下是重要的函数,我们在C/C++中使用日期和时间时会使用它们。所有这些功能都是标准C/C++库的一部分,您可以参考下面提供的C++标准库来检查其详细信息。
    • time_t time(time_t * time); - 这将返回自1970年1月1日以来经过的秒数的系统当前日历时间。如果系统没有时间,则返回.1。
    • char * ctime(const time_t * time); - 这将返回一个指针,该字符串的格式为day month year year hours:minutes:seconds year \ n \ 0。
    • struct tm * localtime(const time_t * time); - 这将返回一个指向本地时间的tm结构的指针。
    • clock_t clock(void); - 这将返回一个近似值,该值近似于调用程序已运行的时间。如果时间不可用,则返回值.1。
    • char * asctime(const struct tm * time); - 这将返回一个指向字符串的指针,该字符串包含存储在时间指向的结构中的信息,该信息转换为以下格式:日月日期小时:分钟:秒年\ n \ 0
    • struct tm * gmtime(const time_t * time); - 这将以tm结构的形式返回指向时间的指针。时间以协调世界时(UTC)表示,本质上是格林威治标准时间(GMT)。
    • time_t mktime(struct tm * time); - 这将返回与时间所指向的结构中找到的时间等效的日历时间。
    • double difftime(time_t time2,time_t time1); - 此函数以秒为单位计算time1和time2之间的时差。
    • 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
    
  • 使用struct tm格式化时间

    在使用C或c++处理日期和时间时,tm结构是非常重要的。这个结构以上面提到的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:" << 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;
    }
    
    尝试一下
    将以上代码编译在一起并执行后,将产生以下结果-
    
    Number of sec since January 1,1970:1563027637
    Year2019
    Month: 7
    Day: 13
    Time: 15:21:38