C语言获取编译时本地时间

今天用C语言开发程序时,为了使软件版本号和编译时间对应,需要获取编译时的本地时间。欲使用C语言的__DATE__,却发现根本不能满足要求,需要进一步对__DATE__进行格式化处理。获取年月日等。

为此我去查阅了各种资料,发现大多数教程都是使用各种各样的库,有的使用了库也要上十行代码。很麻烦,于是我根据查找到的资料和个人经验写出了实习这个功能的代码,能够获取单独年月日时分秒,代码如下:

#include <stdio.h>
 
// 年
#define OS_YEAR     ((((__DATE__ [7] - '0') * 10 + (__DATE__ [8] - '0')) * 10 \
                                     + (__DATE__ [9] - '0')) * 10 + (__DATE__ [10] - '0'))
 
// 月
#define OS_MONTH    (__DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ? 1 : 6) \
                                 : __DATE__ [2] == 'b' ? 2 \
                                 : __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? 3 : 4) \
                                 : __DATE__ [2] == 'y' ? 5 \
                                 : __DATE__ [2] == 'l' ? 7 \
                                 : __DATE__ [2] == 'g' ? 8 \
                                 : __DATE__ [2] == 'p' ? 9 \
                                 : __DATE__ [2] == 't' ? 10 \
                                 : __DATE__ [2] == 'v' ? 11 : 12)
 
// 日
#define OS_DAY      ((__DATE__ [4] == ' ' ? 0 : __DATE__ [4] - '0') * 10 \
                                 + (__DATE__ [5] - '0'))
 
// 时
#define OS_HOUR     ((__TIME__ [0] - '0') * 10 + (__TIME__ [1] - '0'))
 
// 分
#define OS_MINUTE   ((__TIME__ [3] - '0') * 10 + (__TIME__ [4] - '0'))
 
// 秒
#define OS_SECOND   ((__TIME__ [6] - '0') * 10 + (__TIME__ [7] - '0'))

 
int main(int argc, char* argv[])
{
    //格式化前
    printf("Build time :%s\tBuild date :%s\n", __TIME__, __DATE__);
    //格式化后
    printf("Year:%d\n", OS_YEAR);
    printf("Month:%d\n", OS_MONTH);
    printf("Day:%d\n", OS_DAY);
    printf("Hour:%d\n", OS_HOUR);
    printf("Minute:%d\n", OS_MINUTE);
    printf("Second:%d\n", OS_SECOND);

 
    return 0;
}

本程序使用Visual Studio 2022 Developer Command Prompt测试编译通过,其他编译器也可以。

运行结果:

C语言获取编译时本地时间-凌空博客

根据自己的需要使用即可,在开发时使用OS_YEAROS_MONTHOS_DAYOS_HOUROS_MINUTEOS_SECOND这些宏来获取更加具体的时间。

温馨提示: 本文最后更新于2023-07-10 16:38:52,某些文章具有时效性,若有错误或已失效,请在下方 留言或联系 凌空博客

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞9打赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容