编译时获得系统的日期和时间

__date__和__time__是C中内置的2个比较有用的宏,它可以返回程序编译的日期和时间。对版本控制时比较有用。本身是struct tm* 类型的,可以使用strftime()函数进行转换

printf("%s--%s",__TIME__,__DATE__);

static time_t getDateFromMacro(char const *time) {
    char s_month[5];
    int month, day, year;
    struct tm t = {0};
    static const char month_names[] = "JanFebMarAprMayJunJulAugSepOctNovDec";

sscanf(time, "%s %d %d", s_month, &day, &year);

month = (strstr(month_names, s_month)-month_names)/3;

t.tm_mon = month;
    t.tm_mday = day;
    t.tm_year = year - 1900;
    t.tm_isdst = -1;

return mktime(&t);
}
转换成time_t后,就已经基本上大路了。time_t包含在time.h

#ifndef __TIME_T

#define __TIME_T

typedef long     time_t;  
/* 用来保存从1970年1月1日0时0分0秒到现在时刻的秒数!
用time()这个函数获取*/

#endif

#if((__DATE__[0] == ‘J‘)&&(__DATE__[1] == ‘a‘)&&(__DATE__[2] == ‘n‘))
 #define MONTHNUM 1
#elif((__DATE__[0] == ‘F‘)&&(__DATE__[1] == ‘e‘)&&(__DATE__[2] == ‘b‘))
 #define MONTHNUM 2
#endif
#if((__DATE__[0] == ‘M‘)&&(__DATE__[1] == ‘a‘)&&(__DATE__[2] == ‘r‘))
 #define MONTHNUM 3
#elif((__DATE__[0] == ‘A‘)&&(__DATE__[1] == ‘p‘)&&(__DATE__[2] == ‘r‘))
 #define MONTHNUM 4
#endif 
#if((__DATE__[0] == ‘M‘)&&(__DATE__[1] == ‘a‘)&&(__DATE__[2] == ‘y‘))
 #define MONTHNUM 5
#elif((__DATE__[0] == ‘J‘)&&(__DATE__[1] == ‘u‘)&&(__DATE__[2] == ‘n‘))
 #define MONTHNUM 6
#endif 
#if((__DATE__[0] == ‘J‘)&&(__DATE__[1] == ‘u‘)&&(__DATE__[2] == ‘l‘))
 #define MONTHNUM 7
#elif((__DATE__[0] == ‘A‘)&&(__DATE__[1] == ‘u‘)&&(__DATE__[2] == ‘g‘))
 #define MONTHNUM 8
#endif 
#if((__DATE__[0] == ‘S‘)&&(__DATE__[1] == ‘e‘)&&(__DATE__[2] == ‘p‘))
 #define MONTHNUM 9
#elif((__DATE__[0] == ‘O‘)&&(__DATE__[1] == ‘c‘)&&(__DATE__[2] == ‘t‘))
 #define MONTHNUM 0x10
#endif 
#if((__DATE__[0] == ‘N‘)&&(__DATE__[1] == ‘o‘)&&(__DATE__[2] == ‘v‘))
 #define MONTHNUM 0x11
#elif((__DATE__[0] == ‘D‘)&&(__DATE__[1] == ‘e‘)&&(__DATE__[2] == ‘c‘))
 #define MONTHNUM 0x12 
#endif

const unsigned char Version_Date[] = {
  (((__DATE__[9]-‘0‘)*16)+(__DATE__[10]-‘0‘)),
  MONTHNUM,
  (((__DATE__[4]-‘0‘)*16)+(__DATE__[5]-‘0‘)),
 };

const unsigned char Version_Time[] = {
  (((__TIME__[0]-‘0‘)*16)+(__TIME__[1]-‘0‘)),
  (((__TIME__[3]-‘0‘)*16)+(__TIME__[4]-‘0‘)),
  (((__TIME__[6]-‘0‘)*16)+(__TIME__[7]-‘0‘)),
 };

时间: 2024-11-05 11:50:51

编译时获得系统的日期和时间的相关文章

C++日期和时间

C++ 日期 & 时间 C++ 标准库没有提供所谓的日期类型.C++ 继承了 C 语言用于日期和时间操作的结构和函数.为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 <ctime> 头文件. 有四个与时间相关的类型:clock_t.time_t.size_t 和 tm.类型 clock_t.size_t 和 time_t 能够把系统时间和日期表示为某种整数. 结构类型 tm 把日期和时间以 C 结构的形式保存,tm 结构的定义如下: struct tm { int tm

java8新特性——新日期和时间API

一.LocalDate,LocalTime,LocalDateTime LocalDate,LocalTime,LocalDateTime类的实例是不可改变的,分别表示使用ISO-8601日历系统的日期,时间,日期和时间.他们提供了简单的日期或时间,并不包含当前的时间信息.也不包含与地区相关的信息. //1.当前时间对象 LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt); //2.自定义时间对象 LocalDateT

Linux系统history命令显示日期和时间,增加history命令保留个数

编辑 /etc/profile文件 # vi /etc/profile 在文件末尾添加 export HISTTIMEFORMAT='%F %T '     #注意有个空格,为了显示时日期与命令之间有空格分割. export HISTSIZE="10000"    #默认保留1000条. 保存 重新login即可生效. Linux系统history命令显示日期和时间,增加history命令保留个数

Linux date命令-显示和设置系统日期与时间 压缩包以YYMMDD格式命令

date --help用法:date [选项]... [+格式] 或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]以给定的格式显示当前时间,或是设置系统日期. -d,--date=字符串        显示指定字符串所描述的时间,而非当前时间  -f,--file=日期文件        类似--date,从日期文件中按行读入时间描述  -r, --reference=文件        显示文件指定文件的最后修改时间  -R, --rf

CentOS下date命令 - 显示和设置系统日期与时间

显示系统日期 要显示系统日期,只要输入: $ date Thu Dec 5 22:55:41 WIB 2013 格式化显示日期 日期有很多格式.如果你不喜欢默认的格式,你可以换一种格式.你可能会想"为什么我需要改变格式? 默认的输出对我足够了." 是的,你说的对,但是当你在编程时,默认输出或许无法满足你的需求,因此需要一些自定义输出. RFC 2822 的日期与时间输出格式 $ date -R Thu, 05 Dec 2013 23:40:53 +0700 RFC 2822 的格式像这

date-打印或者设置系统日期和时间

date:打印或者设置系统日期和时间. 语法: date [OPTION]... [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] 选项: -s:设置日期和时间: -d:通过描述时间的字符串来显示时间: -f:读取文件中的日期和时间: -I:使用ISO 8601格式输出日期.时间: -r:显示文件的最近的修改时间: -R:使用RFC 2822格式输出日期和时间: -u:打印或者设置世界标准时间. 格式: %Y:年: %m:

Android系统编译时遇到的几个.mk的疑惑。

在Android4.2的源码Build/prduct_config.mk里面遇到几个疑惑: # Convert a short name like "sooner" into the path to the product # file defining that product. # INTERNAL_PRODUCT := $(call resolve-short-product-name, $(TARGET_PRODUCT)) ifneq ($(current_product_ma

sublime text 编译时提示[WinError 2] 系统找不到指定的文件。

问题描述: [WinError 2] 系统找不到指定的文件. [cmd: ['g++', 'D:\\source-code\\sublime\\test.cpp', '-o', 'D:\\source-code\\sublime/test']] [dir: D:\source-code\sublime] [path: D:\program\basic\python3.4.0;C:\Windows\system32;C:\Windows;C:\Windows\system32\wbem] 如下图:

VB6.0中,日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)

VB6.0中,日期.时间控件不允许为空时,采用文本框与日期.时间控件相互替换赋值,或许是一个不错的选择. 实现效果如下图: 代码如下: 文本框txtStopTime1 时间框DTStopTime1 格式3 - dtpCustom  HH:mm:ss Private Sub Form_Load()       txtStopTime1.ZOrder       DTStopTime1.Top = txtStopTime1.Top       DTStopTime1.Left = txtStopTi