Skocz do zawartości

Obliczanie dat w WinAPi


Surprise

Recommended Posts

To Ci sie moze przydać :) reszta to tylko petla iteracyjna i masz gotowe algo. Powodzenia :)

int fYearLeap(int year)
{
        if((year%4) != 0) return 0;
        else
                if((year%400) == 0) return 1;
                else
                        if((year%100) == 0)return 0;

        return 1;
                        
}

int fGetNrdayofmonth(int month, int year)
{

        if(month == 1 || month == 3 || month == 5 ||month == 7 ||
                month == 8 || month == 10 || month == 12)
        {
                return 31;
        }
        if(month == 4 || month == 6 || month == 9 || month == 11)
        {
                return 30;
        }
        if(month == 2 && fYearLeap(year) == 1)
        {
                return 29;
        }
        else
        {
                return 28;
        }
}
Link do komentarza
Udostępnij na innych stronach

A ja swego czasu napisalem taka procedurke:

// zwraca liczbe dni pomiedzy dwoma datami
int RoznicaDat(DATA_CZAS *in2, DATA_CZAS *in1)
{
  DATA_CZAS temp;
  int sum1, sum2;
  int a, b;
  
  // in1 musi byc wczesniej niz in2
  if(in1->rok > in2->rok) return -1;
  if(in1->rok == in2->rok)
  {
    if(in1->miesiac > in2->miesiac) return -1;
    if(in1->miesiac == in2->miesiac)
      if(in1->dzien > in2->dzien) return -1;
  }
      
  memcpy(&temp, in1, sizeof(DATA_CZAS));
  // oblicz sume dni in1
  sum1 = in1->dzien;
  for(a = 0; a < in1->miesiac - 1; a++)
    sum1 += ((!(in1->rok % 4)) && (a == 1)) ? 29 : maxdni[a];
  for(a = 0; a < in1->rok; a++) 
    sum1 += (a % 4) ? 365 : 366;
  
  // oblicz sume dni in2    
  sum2 = in2->dzien;
  for(a = 0; a < in2->miesiac - 1; a++)
    sum2 += ((!(in2->rok % 4)) && (a == 1)) ? 29 : maxdni[a];
  for(a = 0; a < in2->rok; a++) 
    sum2 += (a % 4) ? 365 : 366;
  
  return sum2 - sum1;
}

maxdni to tablica 12-elementowa int z iloscia dni poszczegolnych miesiecy (luty = 28 )
Niby dziala

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...