[c] konwersja czasu w zapisie unixowym na ludzki

0

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

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 ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1