linux后一天日期的写法,Linux下实现给定一个日期求后面一天的日期

有的时候在程序中往往需要用到一个日期后面的一天日期,为了方便以后工作中还会用到,写个模板来方便以后调用,下面为实现的demo程序

//tomorrow.c

/*************************************************************************************************

FileName : tomorrow.c

FileFunc : 给出一个日期(YYYYMMDD),返回这个日期后面的一天(给出的和返回的日期都是字符串格式)

Version : V0.1

Author : Sunrier

Date : 2012-07-04 13:38:03

Descp : Linux下实现给定一个日期求出后面的一天

*************************************************************************************************/

#include

#include

#include

typedef unsigned long ulYear;

typedef unsigned long ulMonth;

typedef unsigned long ulDay;

void GetLocalTime( char *pOutTime )

{

time_t t;

struct tm tm1;

t = time(NULL);

memcpy(&tm1,localtime(&t),sizeof(struct tm));

sprintf(pOutTime,"%04d%02d%02d",tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday);

/*sprintf(pOutTime,"%04d-%02d-%02d %02d:%02d:%02d",tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour,tm1.tm_min,tm1.tm_sec);*/

/*YYYYMMDDHHMMSS(年月日时分秒) */

}

unsigned long asc_long(unsigned char *pucSrc,unsigned int uiLen)

{

unsigned int uiI;

unsigned long ulTmp1,ulTmp2;

ulTmp1 = 0 ;

ulTmp2 = 1 ;

pucSrc += uiLen ;

for (uiI = 0; uiI< uiLen ; uiI++)

{

ulTmp1 += (ulTmp2 * (*--pucSrc & 0x0F) ) ;

ulTmp2 *= 10 ;

}

return (ulTmp1) ;

}

unsigned char *long_asc( unsigned char *pucDest,unsigned int uiLen,unsigned long ulSrc )

{

unsigned int uiI;

unsigned char ucCh;

unsigned char aucTab[10];

unsigned char *pucPtr;

unsigned long ulTmp1,ulTmp2;

ulTmp1 = ulSrc;

ulTmp2 = 100000000L ;

for (uiI = 0; uiI< 5; uiI++)

{

ucCh = (unsigned char)(ulTmp1 / ulTmp2) ;

aucTab[2*uiI] = ucCh / 10 + 0x30 ;

aucTab[2*uiI+1] = ucCh % 10 + 0x30;

ulTmp1 = ulTmp1 % ulTmp2;

ulTmp2 = ulTmp2 / 100;

}

memset( pucDest, 0x30, uiLen ) ;

pucDest += uiLen ;

pucPtr = pucDest ;

if ( uiLen > 10 )

uiLen = 10 ;

for( uiI=0; uiI < uiLen;uiI++)

*--pucDest = aucTab[9-uiI] ;

return( (unsigned char*)pucPtr );

}

int dateAdd(char *pcDate,char *pcDateAdd)

{

unsigned char ucLeapYearFlag = 0;

ulYear year = 0;

ulMonth month = 0;

ulDay day = 0;

year = asc_long((unsigned char*)pcDate, 4);

month = asc_long((unsigned char*)pcDate+4, 2);

day = asc_long((unsigned char*)pcDate+6, 2);

if((year%4==0 && year%100!=0) || (year%400==0))

ucLeapYearFlag = 1;

day += 1;

switch( month )

{

case 1:

if(day > 31)

{

day = 1;

month += 1;

}

break;

case 2:

if( ucLeapYearFlag )

{

if(day > 29)

{

day = 1;

month += 1;

}

}

else

{

if(day > 28)

{

day = 1;

month += 1;

}

}

break;

case 3:

if(day > 31)

{

day = 1;

month += 1;

}

break;

case 4:

if(day > 30)

{

day = 1;

month += 1;

}

break;

case 5:

if(day > 31)

{

day = 1;

month += 1;

}

break;

case 6:

if(day > 30)

{

day = 1;

month += 1;

}

break;

case 7:

if(day > 31)

{

day = 1;

month += 1;

}

break;

case 8:

if(day > 31)

{

day = 1;

month += 1;

}

break;

case 9:

if(day > 30)

{

day = 1;

month += 1;

}

break;

case 10:

if(day > 31)

{

day = 1;

month += 1;

}

break;

case 11:

if(day > 30)

{

day = 1;

month += 1;

}

break;

case 12:

if(day > 31)

{

day = 1;

month = 1;

year += 1;

}

break;

default :

return 1;

}

long_asc((unsigned char*)pcDateAdd, 4, year);

long_asc((unsigned char*)pcDateAdd+4, 2, month);

long_asc((unsigned char*)pcDateAdd+6, 2, day);

return 0;

}

//demo.c

/*******************************************************************************************

FileName : demo.c

FileFunc : 定义测试文件

Version : V0.1

Author : Sunrier

Date : 2012-07-04 13:37:00

Descp : Linux下实现给定一个日期求出后面的一天(给出的和返回的日期都是字符串格式)

*******************************************************************************************/

#include

#include

int main(int argc,char *argv[])

{

unsigned char aucDate[30],aucDateAdd[30];

memset(aucDate,0,sizeof(aucDate));

GetLocalTime(aucDate);

memset(aucDateAdd,0,sizeof(aucDateAdd));

dateAdd(aucDate,aucDateAdd);

printf("%s\n",aucDate);

printf("%s\n",aucDateAdd);

return 0;

}

//makefile

#makefile

OBJS = demo

all:$(OBJS)

CFLAGS = -O -w -ansi

#CFLAGS = -O -Wall -ansi

CC = gcc $(CFLAGS)

demo:demo.c tomorrow.c

@$(CC) -o $@ $?

clean:

@ls | grep -v ^makefile$$ | grep -v [.]c$$ | grep -v [.]h$$ | grep -v [.]sql$$ | grep -v [.]sh$$ | xargs rm -rf

#makefile

[Sunrier@localhost Date]$ ls demo.c  makefile  tomorrow.c [Sunrier@localhost Date]$ make [Sunrier@localhost Date]$ ls demo  demo.c  makefile  tomorrow.c [Sunrier@localhost Date]$ ./demo 20120704 20120705 [Sunrier@localhost Date]$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值