Last active
February 23, 2019 07:19
-
-
Save vanessaaleung/281fe7f520a0bb20a59b3fa3d1189991 to your computer and use it in GitHub Desktop.
Time Calculation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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