Skocz do zawartości

Obliczanie dat w WinAPi


Recommended Posts

Napisano

Mam sobie takie problemi. Mały bo mały ale zawsze coś...
Są sobie takie dwie strukturki - SYSTEMTIME, wypełnione dwoma datami.
Chcę żeby jakaś funkcja ładniutko mi wyświetliła ile dni te dwie daty dzieli.
Czy ktoś zna taką funkcję, a może napisze jakąś dla mnie..
PLISSS...

Napisano

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;
        }
}
Napisano

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

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...