#include #include #include /* Cộng thời gian bằng ngôn ngữ C ! Note: ! - 1 ngày = 86400 giây ! - 1 giờ = 3600 giây ! - 1 phút = 60 giây - Ý tưởng: - Bước 1: Đổi thời gian vừa nhập ra tổng số giây: - Format khi nhập thời gian vào là: hh:mm:ss (hh là giờ, mm là phút, ss là giây) - Cần phải tách các thành phần giờ, phút, giây và dấu ":" cần bị loại bỏ => sử dụng hàm strtok trong string.h - Chuyển các thành phần giờ, phút giây từ xâu ký tự (tách được từ hàm strtok) sang kiểu int => dùng hàm atoi trong stdlib.h - Sử dụng công thức: giờ * 3600 + phút * 60 + giây - Bước 2: Cộng tổng số giây từ hai thời gian nhập vào: - Nếu tổng này >= 86400 giây (1 ngày), hoặc là thời gian mới sau khi cộng vượt quá 1 ngày: - Thì lấy tổng này trừ đi 86400 giây, sẽ ra được đúng thời gian trong khoảng 24h: - Ví dụ: sau khi cộng ra thời gian là: 25h (hoặc 90000 giây, hoặc 25:00:00) thì phải trừ đi 86400 giây => ra được 3600 giây (hoặc 1h ngày hôm sau, hoặc 01:00:00) - Bước 3: Cuối cùng, đổi tổng số giây này ra đúng các thành phần giờ, phút, giây theo các bước như sau: 1. Số giờ = tổng số giây / 3600 giây 2. Tổng số giây = tổng số giây % 3600 (trừ tổng số giây cho số giây mà chia hết cho 3600 giây để ra số giờ) 3. Số phút = tổng số giây / 60 giây 3. Tổng số giây = tổng số giây % 60 (giải thích tương tự như bước 2) 4. Số giây = tổng số giây còn lại */ const int DAY_IN_SECONDS = 86400; const int HOUR_IN_SECONDS = 3600; const int MINUTE_IN_SECONDS = 60; int *getTimeArrayFromTimeString(char *time) { int *convertedTime = (int *)calloc(3, sizeof(int)); char *number = strtok(time, ":"); convertedTime[0] = atoi(number); int index = 1; while (number != NULL) { number = strtok(NULL, ":"); convertedTime[index] = atoi(number); index++; } return convertedTime; } int getTotalSecondsFromTime(char *time) { int *timeArray = getTimeArrayFromTimeString(time); return timeArray[0] * HOUR_IN_SECONDS + timeArray[1] * MINUTE_IN_SECONDS + timeArray[2]; } int *getTimeArrayFromTotalSeconds(int totalSeconds) { int *timeArray = (int *)calloc(3, sizeof(int)); int hour, minute, second; hour = totalSeconds / HOUR_IN_SECONDS; totalSeconds %= HOUR_IN_SECONDS; minute = totalSeconds / MINUTE_IN_SECONDS; totalSeconds %= MINUTE_IN_SECONDS; second = totalSeconds; timeArray[0] = hour; timeArray[1] = minute; timeArray[2] = second; return timeArray; } int *addTime(char *time1, char *time2) { int totalSeconds1 = getTotalSecondsFromTime(time1); int totalSeconds2 = getTotalSecondsFromTime(time2); int resultTotalSeconds = totalSeconds1 + totalSeconds2; if (resultTotalSeconds >= DAY_IN_SECONDS) resultTotalSeconds -= DAY_IN_SECONDS; return getTimeArrayFromTotalSeconds(resultTotalSeconds); }