Pridanie dni k datumu

Programovacie jazyky, rady, poradňa...
lowmanek
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 977
Registrovaný: 04 apr 2010, 8:53
Bydlisko: 221B Baker Street

Pridanie dni k datumu

Príspevok od používateľa lowmanek »

Zdravim,
riesim jednu ulohu, uz mam cely algoritmus vymysleny, az na jednu cast - potrebujem pridat k datumu, resp. roku niekolko dni a vypisat dany datum.

Toto riesenie sice funguje, lenze pri takych stotisicoch uz chybuje cca o 3 dni a netusim preco. Nepouzivam time kniznicu, pretoze potrebujem pracovat s nizkymi rokmi. Zabil som s tym uz asi 4 hodiny, tak prosim pomozte :D

PS: Viem, ze sa to da spravit aj s lepsim casom, ale aj tak je ten runtime kratky a splni ucel.

//aha, tak zistil som, ze napr. rok 700 je priestupny...ale preco sakra? :D

Kód: Vybrať všetko

void add(int rok, long long int i_dni) {
  int mesiace[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, mesiac = 0;
  
  while (i_dni >= mesiace[mesiac]) {
      i_dni -= mesiace[mesiac++];
      
      if (mesiac > 11) {
        mesiac = 0;
        rok++;
        if ((rok % 400 == 0) || (rok % 4 == 0 && rok % 100 != 0)) {
          mesiace[1] = 29;
        }
        else {
          mesiace[1] = 28;
        };
      };
  };
  printf("%lld %d %d", i_dni+1, mesiac+1, rok);
  
};
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Pridanie dni k datumu

Príspevok od používateľa audiotrack »

Súčasný kalendár prijal pápež Gregor XIII. v roku 1582. Vystriedal kalendár Julia Caesara, ktorý prestal vyhovovovať, pretože bol nepresný. Dovtedy bol priestupný rok každý štvrtý, po novom pribudli výnimky
niektoré roky však boli pridané ako priestupné aj po roku 1582 aj keď nemali byť. Takže ten výpočet nie je zďaleka tak jednoduchý ak to má byť univerzálne aj spätne, a nie len výpočet do budúcnosti. Ak počítaš dozadu, tak pred rokom 1852 by to malo byť len delenie 4, po tom roku už tie dve pravidlá navyše. Plus si treba pozreť výnimky, to boli asi 2 či 3 roky.

inak na pridávanie dní k dátumu je kopec funkcií v každom jazyku. Možno by si mal radšej tú time knižnicu používať ;)
Napísať odpoveď