是否有可能在编译时获得当前时间?

时间:2017-05-05 10:23:24

标签: c++ timestamp c++14 constexpr

我正考虑将当前时间戳用作一个版本。我想在编译时检索该信息。理想情况下,我想这样做:

constexpr long long currentTimestamp = getCurrentTimestamp();

C ++ 14可以实现吗?

2 个答案:

答案 0 :(得分:14)

standard C __TIME__宏与__DATE__宏一起使用。 有关示例,请参阅this问题。

答案 1 :(得分:7)

使用__DATE____TIME____TIMESTAMP__

#include <stdio.h>

int main()
{
    printf("date: '%s'\n", __DATE__);
    printf("time: '%s'\n", __TIME__);
    printf("timestamp: '%s'\n", __TIMESTAMP__);
}

Output

date: 'May  5 2017'
time: '00:29:26'
timestamp: 'Fri May  5 00:29:26 2017'

但是,出于显而易见的原因,您需要确保重新编译该文件。

来自gcc online docs

  

__DATE__

     

此宏扩展为一个字符串常量,该常量描述预处理器运行的日期。字符串常量包含   十一个字符,看起来像“1996年2月12日”。如果当天的   月份不到10个,左边是空格。

     

__TIME__

     

此宏扩展为一个字符串常量,该常量描述预处理器的运行时间。字符串常量包含   八个字符,看起来像“23:59:01”。

     

__TIMESTAMP__

     

此宏扩展为字符串常量,该常量描述上次修改当前源文件的日期和时间。该   字符串常量包含星期,月,日的缩写日   月份,时间以hh:mm:ss形式,年份,看起来像“Sun Sep 16   1973年01:03:52“。如果这个月的日子少于10天,它就会被填充   在左边有一个空格。

请注意,__TIMESTAMP__不是标准的,有些编译器可能不支持它。