/* ============================================================================ Name : Exercise.c Author : haier Version : 0.01 Copyright : Your copyright notice Description : Ansi-style, Compile by Code:Blocks, Platform Linux ============================================================================ */ /* 思路:首先求出输入时间到1970-1-1总秒数,然后加上一天时间后转换成日历时间并输出。 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <ctype.h> #define SECONDS_PER_DAY (60*60*24) struct date { unsigned year; unsigned month; unsigned day; } myDate; void nextDay(struct date myDate) { struct tm time,*tm_ptr; time_t seconds; /*填充struct tm*/ time.tm_year = myDate.year - 1900; time.tm_mon = myDate.month - 1; time.tm_mday = myDate.day; time.tm_hour = 12; //默认为该日12:00:00 time.tm_min = 0; time.tm_sec = 0; seconds=mktime(&time)+SECONDS_PER_DAY; //转换tm结构为time_t类型值,并加一天 /*转换并打印日期*/ tm_ptr = gmtime(&seconds); printf("%d/%d/%d ",tm_ptr->tm_year+1900, tm_ptr->tm_mon+1, tm_ptr->tm_mday); } int main() { char strTime[20]; char *p; int inputTimes=3; /*输入处理,允许输入3次*/ do { inputTimes--; printf("Please input the date(YYYY/MM/DD) : "); scanf("%s",strTime); /*转换时间字符串*/ p = strtok(strTime, "/"); myDate.year=atoi(p); p = strtok(NULL, "/"); myDate.month=atoi(p); p = strtok(NULL, "/"); myDate.day=atoi(p); if(myDate.year<1970 || myDate.month<=0 || myDate.month>12 || myDate.day<=0 || myDate.day >31) { printf("error in input, please try again ! "); } else { break; } }while(inputTimes>0); if(inputTimes>0) {
nextDay(myDate);
} return 0; }
运行示例: