今天用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测试编译通过,其他编译器也可以。
运行结果:
根据自己的需要使用即可,在开发时使用OS_YEAR、OS_MONTH、OS_DAY、OS_HOUR、OS_MINUTE、OS_SECOND这些宏来获取更加具体的时间。
感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
暂无评论内容