📄 fun_date.c
字号:
#include <stdio.h>typedef struct Date { char YYYY [ 5 ]; char MM [ 3 ]; char DD [ 3 ];}DATE ;void RelativeDate ( char *pInDate , char *pOutDate , long n );int main(int argc, char *argv[]){ char *tim ; char tim1[10] ; tim=argv[1] ; RelativeDate ( tim , tim1 ,-1 ) ; printf("%s\n",&tim1[4]);} /*TION NAME : RelativeDate ( char *pInDate , char *pOutDate , long n ) * Usage: pInDate char [9], pOutDate char [9] , n long * 起始日期 输出日期 间隔天数 * Disc : 计算起始日期的n天后的日期 * OUTPUT:THE OUTPUT IS pOutDate is the date after n days of InDate *********************************************************************/void RelativeDate ( char *pInDate , char *pOutDate , long n ){ unsigned short Year ; unsigned short Mon ; unsigned short Day ; DATE StartDate ; DATE EndDate ; short rc ; unsigned long i ; char TmpStr [4] ; i = 0 ; #ifdef DEBUG printf ( "%s\n", pInDate ); #endif memset ( StartDate . YYYY , 0x00, 5 ); memset ( StartDate . MM , 0x00, 3 ); memset ( StartDate . DD , 0x00, 3 ); memcpy ( StartDate . YYYY , pInDate , 4 ); memcpy ( StartDate . MM , pInDate + 4 , 2 ); memcpy ( StartDate . DD , pInDate + 6 , 2 ); #ifdef DEBUG printf ( "%s+++%s+++%s\n", StartDate . YYYY , StartDate . MM , StartDate . DD ); #endif Year = atoi ( StartDate . YYYY ); Mon = atoi ( StartDate . MM ); Day = atoi ( StartDate . DD ); #ifdef DEBUG printf ( "%d---%d---%d\n", Year , Mon , Day ); #endif if ( n == 0 ) { strcpy ( pOutDate , pInDate ); return ; } if ( n > 0 ) { for ( ;; ) { if ( i < n ) { i ++ ; Day = Day + 1 ; rc = f_Is_Nleapyear ( Year ); if ( rc == 0 ) { if ( ( Day == 29 ) && ( Mon == 2 ) ) { Day = 1 ; Mon = Mon + 1 ; } } else { if ( ( Day == 30 ) && ( Mon == 2 ) ) { Day = 1 ; Mon = Mon + 1 ; } } if ( ( Day == 31 ) && ( Mon == 4 || Mon == 6 || Mon == 9 || Mon == 11 ) ) { Day = 1 ; Mon = Mon + 1 ; } if ( ( Day == 32 ) && ( Mon == 1 || Mon == 3 || Mon == 5 || Mon == 7 || Mon == 8 || Mon == 10 ) ) { Day = 1 ; Mon = Mon + 1 ; } if ( Day == 32 && Mon == 12 ) { Day = 1 ; Mon = 1 ; Year = Year + 1 ; } } else { break ; } } } if ( n < 0 ) { n = 0 - n ; for ( ;; ) { if ( i < n ) { i ++ ; Day = Day - 1 ; rc = f_Is_Nleapyear ( Year ); if ( rc == 0 ) { if ( ( Day == 0 ) && ( Mon == 3 ) ) { Day = 28 ; Mon = Mon - 1 ; } } else { if ( ( Day == 0 ) && ( Mon == 3 ) ) { Day = 29 ; Mon = Mon - 1 ; } } if ( ( Day == 0 ) && ( Mon == 2 || Mon == 4 || Mon == 6 || Mon == 9 || Mon == 8 || Mon == 11 ) ) { Day = 31 ; Mon = Mon - 1 ; } if ( ( Day == 0 ) && ( Mon == 12 || Mon == 5 || Mon == 7 || Mon == 10 ) ) { Day = 30 ; Mon = Mon - 1 ; } if ( Day == 0 && Mon == 1 ) { Day = 31 ; Mon = 12 ; Year = Year - 1 ; } } else break ; } } #ifdef DEBUG printf ( "%d---%d---%d\n", Year , Mon , Day ); #endif memset ( pOutDate , 0x00 , sizeof ( pOutDate ) ) ; memset ( TmpStr , 0x00 , sizeof ( TmpStr ) ) ; sprintf( TmpStr, "%04d%02d%02d", Year , Mon , Day ); strcpy ( pOutDate , TmpStr ) ; return ; }/* TION NAME :int f_Is_Nleapyear ( unsigned short YYYY ) * Usage: YYYY 是年份转换成的整数 * Discription: 检查YYYY是否闰年 * OUTPUT: 0 - No, 0 - Yes , *********************************************************************/int f_Is_Nleapyear ( unsigned short YYYY ){ unsigned short nian ; unsigned short N1 ; unsigned short N2 ; unsigned short N3 ; nian = YYYY ; N1 = nian % 4 ; N2 = nian % 100 ; N3 = nian % 400 ; if ((( N1 == 0 ) && ( N2 != 0 )) || ( ( N2 == 0 ) && ( N3 == 0 ) ) ) return 1 ; return 0 ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -