Co chcę zrobić, to przekonwertować czas epoki (sekundy od północy 1/1/1970) na "rzeczywisty" czas (m/d/y: m: s)Konwersja czasu epoki na "prawdziwą" datę/czas
tej pory mam następujący algorytm, który do mnie czuje się trochę brzydki:
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;
}
można założyć, że członkowie seconds
, minutes
, hours
, month
, day
i year
ogóle istnieje.
Używanie pętli for
do modyfikowania oryginalnego czasu wydaje się nieco dziwne i zastanawiałem się, czy istnieje "lepsze" rozwiązanie tego problemu.
OK, więc wiem, że szukasz rozwiązania proceduralnego ... ale jeśli jeszcze go nie widziałeś, sprawdź http://www.epochconverter.com. Jest to bardzo przydatny sposób sprawdzenia twojej pracy :) – Tom
Co jest złego w zwykłym wywołaniu tej funkcjonalności wyeksponowanym przez 'time.h', np. autor: [gmtime] (http: //www.cplusplus.com/reference/clibrary/ctime/gmtime /) czy GMT, a nie jakaś konkretna strefa czasowa, jest tym, o co prosisz? –
Nic w tym złego, nawet nie wiedziałem, że istnieje. Dzięki! Ale nadal jestem zainteresowany tym, jak moja implementacja może być lepsza. –