я делаю так
typedef struct
{
unsigned char D;//число месяца 1-31
unsigned char M;//месяц 1-12
unsigned char Y;//год
}DataKompil_t;
void InitDataKomp(DataKompil_t* s);
typedef struct
{
unsigned char H;//часы
unsigned char M;//минуты
unsigned char S;//секунды
}TimeKompil_t
static const char StrDate[]=__DATE__;
//01234567890
//Oct 30 2010
static const char StrTime[]=__TIME__;
//01234567
//hh:mm:ss
//сравнение строк
//возвращаемое значение
//совпадение 1
//не совпадение 0
//аргументы
//s1-большая строка
//s2-малая строка
//Poz- позиция в большой строке
//Kolvo - количество сравниваемых символов
static unsigned char StrCompare(const char* s1,char* s2,char Poz,char Kolvo)
{
for(int i=0;i<Kolvo;i++)
{
if(s1[Poz+i]!=s2[i])return 0;
}
return 1;
}
//проверка на число
static unsigned char DataCompare(void)
{
//если день месяца один символ
if(StrDate[4]==' ')
{
for(int i0=1;i0<10;i0++)
{
if(StrDate[5]==(i0+'0'))
{
return i0;
}
}
return 0;
}
//если день месяца два символа
for(int i1=1;i1<4;i1++)
{
for(int i0=0;i0<10;i0++)
{
char stemp[2];
stemp[0]=i1+'0';
stemp[1]=i0+'0';
if(StrCompare(StrDate,stemp,4,2))
{
return 10*i1+i0;
}
}
}
return 0;
}
//проверка на год
static unsigned char YearCompare(void)
{
for(int i1=0;i1<10;i1++)
{
for(int i0=0;i0<10;i0++)
{
char stemp[2];
stemp[0]=i1+'0';
stemp[1]=i0+'0';
if(StrCompare(StrDate,stemp,9,2))
{
return 10*i1+i0;
}
}
}
return 0;
}
//инициализация даты компиляции
//заполнение полей структуры
void InitDataKomp(DataKompil_t* s)
{
//проверка на месяц
if (StrCompare(StrDate,((char*)"Jan"),0,3))
{s->M=1;}
else if(StrCompare(StrDate,((char*)"Feb"),0,3))
{s->M=2;}
else if(StrCompare(StrDate,((char*)"Mar"),0,3))
{s->M=3;}
else if(StrCompare(StrDate,((char*)"Apr"),0,3))
{s->M=4;}
else if(StrCompare(StrDate,((char*)"May"),0,3))
{s->M=5;}
else if(StrCompare(StrDate,((char*)"Jun"),0,3))
{s->M=6;}
else if(StrCompare(StrDate,((char*)"Jul"),0,3))
{s->M=7;}
else if(StrCompare(StrDate,((char*)"Aug"),0,3))
{s->M=8;}
else if(StrCompare(StrDate,((char*)"Sep"),0,3))
{s->M=9;}
else if(StrCompare(StrDate,((char*)"Oct"),0,3))
{s->M=10;}
else if(StrCompare(StrDate,((char*)"Nov"),0,3))
{s->M=11;}
else if(StrCompare(StrDate,((char*)"Dec"),0,3))
{s->M=12;}
//опрпеделение числа
s->D=DataCompare();
//определить год
s->Y=YearCompare();
}
static unsigned char HorsCompare(void)
{
for(int i1=0;i1<3;i1++)
{
for(int i0=0;i0<10;i0++)
{
char stemp[2];
stemp[0]=i1+'0';
stemp[1]=i0+'0';
if(StrCompare(StrTime,stemp,0,2))
{
return 10*i1+i0;
}
}
}
return 0;
}
static unsigned char MinCompare(void)
{
for(int i1=0;i1<6;i1++)
{
for(int i0=0;i0<10;i0++)
{
char stemp[2];
stemp[0]=i1+'0';
stemp[1]=i0+'0';
if(StrCompare(StrTime,stemp,3,2))
{
return 10*i1+i0;
}
}
}
return 0;
}
static unsigned char SekCompare(void)
{
for(int i1=0;i1<6;i1++)
{
for(int i0=0;i0<10;i0++)
{
char stemp[2];
stemp[0]=i1+'0';
stemp[1]=i0+'0';
if(StrCompare(StrTime,stemp,6,2))
{
return 10*i1+i0;
}
}
}
return 0;
}
//инициализация времени компиляции
//заполнение полей структуры
void InitTimeKomp(TimeKompil_t* s)
{
s->H=HorsCompare();
s->M=MinCompare();
s->S=SekCompare();
}