Skip to content

Instantly share code, notes, and snippets.

@vanessaaleung
Last active February 23, 2019 07:19
Show Gist options
  • Save vanessaaleung/281fe7f520a0bb20a59b3fa3d1189991 to your computer and use it in GitHub Desktop.
Save vanessaaleung/281fe7f520a0bb20a59b3fa3d1189991 to your computer and use it in GitHub Desktop.
Time Calculation
// Created by Vanessa Leung on 2019/2/22.
#include <stdio.h>
#include <string.h>
//Declare all functions to be used first
//isLeapYear
int leap(int year){
if (((year % 400 == 0) && (year % 3200 != 0)) ||
((year % 4 == 0) && (year % 100 != 0)))
return 1;
else
return 0;
}
//Days in month
int numdays(int month){
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
return 31;
else if (month == 2)
return 28;
else
return 30;
}
//main function
int main()
{
//Loop for continued input
while(1){
int valid = 0;
int year = 0, month = 0, day = 0, hour = 0, minute = 0;
int duration, hold, numday = 0;
//Check if date is valid
while (valid == 0){
char date[255], Year[255], Month[255], Day[255], Hour[255], Minute[255];
//Read Date as string
printf("Enter Origin Date: (e.g. 201901010900)\n");
scanf("%s", date);
//Assign year, month, day, hour
strncpy(Year, date, 4);
strncpy(Month, date + 4, 2);
strncpy(Day, date + 6, 2);
strncpy(Hour, date + 8, 2);
strncpy(Minute, date + 10, 2);
//Convert string to integer
sscanf(Year, "%d", &year);
sscanf(Month, "%d", &month);
sscanf(Day, "%d", &day);
sscanf(Hour, "%d", &hour);
sscanf(Minute, "%d", &minute);
//Calculate number of days in month
if ((leap(year) == 1) && (month == 2)){ //Special case: February in leap years
numday = 29;
} else{
numday = numdays(month);
}
//If input is invalid
if ((month > 12) || (day > numday) || (hour >= 24) || (minute >= 60)){
printf("Please Enter a Valid Date!\n");
} else{
valid = 1;
}
}
//Read Duration
printf("Enter Duration: (in minutes)\n");
scanf("%d", &duration);
//Make a copy to avoid any modification on original data
int year2 = year, month2 = month, day2 = day, hour2 = hour, minute2 = minute;
//If duration >= 60mins, then hour++
hour2 += duration / 60;
hold = duration % 60;
//If minute >= 60mins, then hour++
if (hold + minute >= 60){
minute2 += hold - 60;
hour2 ++;
} else{
minute2 += hold;
}
//If hour >= 24hrs, then day++
if (hour2 >= 24){
day2 += hour2 / 24;
hour2 = hour2 % 24;
}
//If day > days in month, then month++
if (day2 > numday){
//Update numday & month2 till day2 < numday(month2)
while (day2 > numday){
month2 ++;
if (month2 > 12){
year2 ++;
month2 -= 12;
}
day2 -= numday;
numday = numdays(month2);
}
}
//If month > 12, then year++
if (month2 > 12){
year2 += month2 / 12;
month2 = month2 % 12;
}
printf("Original Time: %d/%d/%d %d:%d\n", year, month, day, hour, minute);
printf("New Time: %d/%d/%d %d:%d\n", year2, month2, day2, hour2, minute2);
//Loop
printf("Press [Enter] to continue.\n");
while(getchar()!='\n');
getchar();
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment