Poszukuje algorytm konwertujący czas w sekundach od 1 1 1970 na zapis ludzki. Nie mam dostepu do bibliteki standardowej, wiec uzycie time.c odpada (chyba, ze ktos wie gdzie jest definicja tej funkcji - same naglowki google znajduje - i nie uzywa ona innych funkcji biblioteki standardowej )
0
0
Algorytm? Na wikipedii masz opis kalendarza obowiązującego. Nic więcej nie potrzeba ponad zasady rządzące długością roku i miesięcy. Masz takiego gotowca na miarę drugiej w nocy - jest w nim do d**y w zasadzie wszystko, od konwencji nazw i wywołań, aż po samą logikę działania takiej np funkcji explodeMonth. Dam sobie rękę uciąć, że nie trzeba tego w pętli robić, ale nie chciało mi się myśleć. Ty pomyśl :]
Aha, nagłówek time.h mam tylko po to, żeby tę ilość sekund pobrać (którą skądś tam masz, jak rozumiem...), więc nie panikuj ;)
I uwaga na strefy czasowe, jak będziesz chciał się upewnić, że to działa. time zwraca w UTC.
#include <iostream>
#include <time.h>
using namespace std;
long cSec = 1;
long cMin = 60*cSec;
long cHour = 60*cMin;
long yDay = 24*cHour;
long yYear = 365*yDay;
long gYear4 = 3*yYear + 366*yDay;
long explodeYear(long t, long* year) {
int count4 = t/gYear4;
int rem4 = t%gYear4;
if(count4>7) rem4 += yDay;
*year = 1970 + 4*count4 + rem4/yYear;
return rem4%yYear;
}
bool overlap(long year) {
return (year%4==0) && (year%100!=0);
}
long monthLength(long year, long month) {
switch(month) {
case 3:
case 5:
case 8:
case 10: return 30*yDay;
case 1: return (overlap(year) ? 29 : 28) * yDay;
default: return 31*yDay;
}
}
long explodeMonth(long t, long year, long* month) {
long m = 0, l = 0;
do {
t -= l;
l = monthLength(year,m++);
} while(t >= l);
*month = m;
return t;
}
int main() {
long t = time(0) + 2*cHour;
long yy, ym, yd, ch, cm, cs;
t = explodeYear(t, &yy);
t = explodeMonth(t, yy, &ym);
yd = t/yDay; t %= yDay;
ch = t/cHour; t %= cHour;
cm = t/cMin; t %= cMin;
cs = t/cSec; t %= cSec;
cout << yy << "/" << ym << "/" << yd << " " << ch << ":" << cm << ":" << cs << endl;
system("pause>null");
return 0;
}
0
wielkie dzieki, wieczorem bede kopiowal ;)