То, что я хочу сделать, - это преобразовать время эпохи (секунды с полуночи 1/1/1970) в "реальное" время (m/d/y h: m: s)
До сих пор у меня есть следующий алгоритм, который мне кажется немного уродливым:
void DateTime::splitTicks(time_t time) {
seconds = time % 60;
time /= 60;
minutes = time % 60;
time /= 60;
hours = time % 24;
time /= 24;
year = DateTime::reduceDaysToYear(time);
month = DateTime::reduceDaysToMonths(time,year);
day = int(time);
}
int DateTime::reduceDaysToYear(time_t &days) {
int year;
for (year=1970;days>daysInYear(year);year++) {
days -= daysInYear(year);
}
return year;
}
int DateTime::reduceDaysToMonths(time_t &days,int year) {
int month;
for (month=0;days>daysInMonth(month,year);month++)
days -= daysInMonth(month,year);
return month;
}
вы можете предположить, что существуют члены seconds
, minutes
, hours
, month
, day
и year
.
Использование циклов for
для изменения первоначального времени немного немного, и мне было интересно, есть ли "лучшее" решение для этого.