可以進行時間相加減```
由於我是在linux下運行的,再轉到window上所以格式會有點亂```諒解!!!
代碼也沒有進行優化處理的```
#include <stdio.h>
#include <stdlib.h>
typedef struct time
{
int year;
int month;
int day;
int hour;
int minute;
int sec;
} ST_TIME;
ST_TIME date;
void add_sec(int secs);
void add_minute(int minutes);
void add_hour(int hours);
void add_day(int days);
int maxday(int leap, int month);
void add_month(int months);
void add_year(int years);
void sub_sec(int secs);
void sub_minute(int minutes);
void sub_hour(int hours);
void sub_day(int days);
void sub_month(int months);
void sub_year(int years);
void sum(void);
void sub(void);
void init_system(void);
int add_number;
int main(int argc, char *argv[])
{
char array[20];
char emblem;
init_system();
printf("Press the '+' or '-' to control.\n");
scanf("%c",&emblem);
switch (emblem)
{
case '+':
{
sum();
break;
}
case '-':
{
sub();
break;
}
}
sprintf(array,"%d-%02d-%02d %02d:%02d:%02d",date.year,date.month,
date.day,date.hour,date.minute,date.sec);
printf("%s\n",array);
return 0;
}
void init_system(void)
{
char str[20];
char *p;
p = str;
printf("Enter the date:\n");
printf("Be sure your inputs like that:2008 12 12 12 12 12\n");
gets(str);
date.year = atoi(p);
date.month = atoi(p+5);
date.day = atoi(p+8);
date.hour = atoi(p+11);
date.minute = atoi(p+14);
date.sec = atoi(p+17);
}
void sum(void)
{
int lab;
printf("please choose the option:\n");
printf("1: add the secs;\n");
printf("2: add the minutes;\n");
printf("3: add the hours;\n");
printf("4: add the days;\n");
printf("5: add the months;\n");
printf("6: add the years;\n");
while (getchar() != '\n');
scanf("%d",&lab);
switch (lab)
{
case 1 :
{
printf("enter the increased secs:");
scanf("%d",&add_number);
add_sec(add_number);
break;
}
case 2:
{
printf("enter the increased minutes:");
scanf("%d",&add_number);
add_minute(add_number);
break;
}
case 3:
{
printf("enter the increased hours:");
scanf("%d",&add_number);
add_hour(add_number);
break;
}
case 4:
{
printf("enter the increased days:");
scanf("%d",&add_number);
add_day(add_number);
break;
}
case 5:
{
printf("enter the increased months:");
scanf("%d",&add_number);
add_month(add_number);
break;
}
case 6:
{
printf("enter the increased years:");
scanf("%d",&add_number);
add_year(add_number);
break;
}
}
}
void sub(void)
{
int lab;
printf("please choose the option:\n");
printf("1: reduce the secs;\n");
printf("2: reduce the minutes;\n");
printf("3: reduce the hours;\n");
printf("4: reduce the days;\n");
printf("5: reduce the months;\n");
printf("6: reduce the years;\n");
scanf("%d",&lab);
switch (lab)
{
case 1 :
{
printf("enter the reduced secs:");
scanf("%d",&add_number);
sub_sec(add_number);
break;
}
case 2:
{
printf("enter the reduced minutes:");
scanf("%d",&add_number);
sub_minute(add_number);
break;
}
case 3:
{
printf("enter the reduced hours:");
scanf("%d",&add_number);
sub_hour(add_number);
break;
}
case 4:
{
printf("enter the reduced days:");
scanf("%d",&add_number);
sub_day(add_number);
break;
}
case 5:
{
printf("enter the reduced months:");
scanf("%d",&add_number);
sub_month(add_number);
break;
}
case 6:
{
printf("enter the increased years:");
scanf("%d",&add_number);
sub_year(add_number);
break;
}
}
}
void add_sec(int secs)
{
date.sec = date.sec + secs;
while (date.sec >= 60)
{
add_minute(1);
date.sec = date.sec - 60;
}
}
void add_minute(int minutes)
{
date.minute = date.minute + minutes;
while (date.minute >= 60)
{
add_hour(1);
date.minute = date.minute - 60;
}
}
void add_hour(int hours)
{
date.hour = date.hour + hours;
while (date.hour >= 24)
{
add_day(1);
date.hour = date.hour - 24;
}
}
void add_day(int days)
{
int leap;
date.day = days + date.day;
/****************************************
* 功能:判斷是否為閏年 *
****************************************/
if ((date.year%4 == 0 && date.year%100 != 0) || (date.year%400 == 0))
{
leap = 1; /*是閏年則leap的值為1*/
}
else
{
leap = 0; /*不是則leap的值為0 */
}
while (date.day > maxday(leap,date.month))
{
if ((date.year%4 == 0 && date.year%100 != 0) || (date.year%400 == 0))
{
leap = 1; /*是閏年則leap的值為1*/
}
else
{
leap = 0; /*不是則leap的值為0 */
}
date.day = date.day - maxday(leap,date.month);
add_month(1);
}
}
void add_month(int months)
{
int leap;
date.month = date.month + months;
while (date.month > 12)
{
date.month = date.month - 12;
add_year(1);
}
if ((date.year%4 == 0 && date.year%100 != 0) || (date.year%400 == 0))
{
leap = 1; /*是閏年則leap的值為1*/
}
else
{
leap = 0; /*不是則leap的值為0 */
}
if (leap==1 && date.month==2 && date.day>=29)
{
date.day = 29;
}
else if (leap==0 && date.month==2 && date.day>=28)
{
date.day = 28;
}
}
void add_year(int years)
{
int leap;
date.year = date.year + years;
if ((date.year%4 == 0 && date.year%100 != 0) || (date.year%400 == 0))
{
leap = 1; /*是閏年則leap的值為1*/
}
else
{
leap = 0; /*不是則leap的值為0 */
}
if (leap==1 && date.month==2 && date.day>=29)
{
date.month = 2;
date.day = 29;
}
else if (leap==0 && date.month==2 && date.day>=28)
{
date.month = 2;
date.day = 28;
}
}
void sub_sec(int secs)
{
date.sec = date.sec - secs;
while (0 > date.sec)
{
sub_minute(1);
date.sec = date.sec + 60;
}
}
void sub_minute(int minutes)
{
date.minute = date.minute - minutes;
while (0 > date.minute)
{
sub_hour(1);
date.minute = date.minute + 60;
}
}
void sub_hour(int hours)
{
date.hour = date.hour - hours;
while (0 > date.hour)
{
sub_day(1);
date.hour = date.hour + 24;
}
}
void sub_day(int days)
{
int leap;
date.day = date.day - days;
/****************************************
* 功能:判斷是否為閏年 *
****************************************/
if ((date.year%4 == 0 && date.year%100 != 0) || (date.year%400 == 0))
{
leap = 1; /*是閏年則leap的值為1*/
}
else
{
leap = 0; /*不是則leap的值為0 */
}
while (0 >= date.day)
{
if ((date.year%4 == 0 && date.year%100 != 0) || (date.year%400 == 0))
{
leap = 1; /*是閏年則leap的值為1*/
}
else
{
leap = 0; /*不是則leap的值為0 */
}
date.day = date.day + maxday(leap,date.month-1);
sub_month(1);
}
}
void sub_month(int months)
{
int leap;
date.month = date.month - months;
while (0 >= date.month)
{
date.month = date.month + 12;
sub_year(1);
}
if ((date.year%4 == 0 && date.year%100 != 0) || (date.year%400 == 0))
{
leap = 1; /*是閏年則leap的值為1*/
}
else
{
leap = 0; /*不是則leap的值為0 */
}
if (leap==1 && date.month==2 && date.day>=29)
{
date.day = 29;
}
else if (leap==0 && date.month==2 && date.day>=28)
{
date.day = 28;
}
}
void sub_year(int years)
{
int leap;
date.year = date.year - years;
if ((date.year%4 == 0 && date.year%100 != 0) || (date.year%400 == 0))
{
leap = 1; /*是閏年則leap的值為1*/
}
else
{
leap = 0; /*不是則leap的值為0 */
}
if (leap==1 && date.month==2 && date.day>=29)
{
date.month = 2;
date.day = 29;
}
else if (leap==0 && date.month==2 && date.day>=28)
{
date.month = 2;
date.day = 28;
}
}
int maxday(int leap, int month)
{
int max_day; /*用於返回此月份的最大值*/
switch (month)
{
case 4:
{
max_day = 30;
break;
}
case 6:
{
max_day = 30;
break;
}
case 9:
{
max_day = 30;
break;
}
case 11:
{
max_day = 30;
break;
}
case 2:
{
if (leap == 1)
{
max_day = 29;
break;
}
else
{
max_day = 28;
break;
}
}
default: max_day = 31;
}
return max_day;
我這裏還有很多的,如果要的話,就聯系我121779988````
只不過我也是個菜鳥級的``