#include <stdio.h>
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int daysInMonth(int year, int month) {
if (month == 2) {
return isLeapYear(year) ? 29 : 28;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
} else {
return 31;
}
}
long dateToEpoch(int year, int month, int day, int hour, int minute, int second) {
int days = 0;
for (int y = 1970; y < year; y++) {
days += isLeapYear(y) ? 366 : 365;
}
for (int m = 1; m < month; m++) {
days += daysInMonth(year, m);
}
days += day - 1;
long seconds = days * 86400 + hour * 3600 + minute * 60 + second;
return seconds;
}
void epochToDate(long seconds) {
int year = 1970, month = 1, day = 1;
int hour = (seconds % 86400) / 3600;
int minute = (seconds % 3600) / 60;
int second = seconds % 60;
printf("#输入的秒数为:[%ld]\r\n", seconds);
seconds /= 86400;
while (seconds >= (isLeapYear(year) ? 366 : 365)) {
seconds -= isLeapYear(year) ? 366 : 365;
year++;
}
while (seconds >= daysInMonth(year, month)) {
seconds -= daysInMonth(year, month);
month++;
}
day += seconds;
printf("秒数转换成时间: %04d-%02d-%02d %02d:%02d:%02d\r\n", year, month, day, hour, minute, second);
}
int main() {
int tyear = 2024;
int tmon = 10;
int tday = 9;
int thour = 9;
int tmin = 46;
int tsec = 50;
long seconds = dateToEpoch(tyear, tmon, tday, thour, tmin, tsec);
printf("%04d-%02d-%02d %02d:%02d:%02d 转换成时间: %ld\r\n",tyear,tmon,tday,thour,tmin,tsec, seconds);
epochToDate(seconds);
return 0;
}