Skocz do zawartości
RosolZKurWielu

Konwerter

Rekomendowane odpowiedzi

A ty chcesz gotowe funkcje na konwersje?
Chcialem wstawic taki fajny moj include, ale mi ktos przeniosl do kosza.
No ale tam mam gotowe funkcje konwertujace czas, napisane dla pawn.
A zebys nie szukal zanadto: http://pastebin.com/fyVnfVWk

Edytowane przez PrzMas

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
stock Konwertuj(&minuty, &dni, &godziny)
{
    dni = minuty / 1440
    minuty -= dni * 1440;
    godziny = minuty / 60;
    minuty -= godziny * 60;
}

Jeżeli chcesz jeszcze większe to pokombinuj.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Taka mała dygresja co do funkcji operujących na dacie...

 

Poniższa funkcja zamienia datę na pewną liczbę:

stock date_to_tick(date[]) // DD-MM-YYYY
{
  new DD, MM, YYYY;
  new temp[4];

  if ( (date[2] != '-')||(date[5] != '-') ) return -1;

  temp[0]= date[0]; temp[1]= date[1];
  if (isval(temp) == 0) return -1;
  else DD= strval(temp);
  if ( (DD < 0)||(DD > 31) ) return -1;

  temp[0]= date[3]; temp[1]= date[4];
  if (isval(temp) == 0) return -1;
  else MM= strval(temp);
  if ( (DD < 0)||(DD > 12) ) return -1;

  temp[0]= date[6]; temp[1]= date[7]; temp[2]= date[8]; temp[3]= date[9];
  if (isval(temp) == 0) return -1;
  else YYYY= strval(temp);
  if (YYYY < 0) return -1;

  return YYYY*(12*31+31+1) + MM*31 + DD;
}

którą z powodzeniem można zamieniać z powrotem na datę.

 

A tu z kolei funkcja zamieniająca liczbę na datę:

stock tick_to_date(date[], tick) // DD-MM-YYYY
{
  new YYYY, MM, DD;
  new val= tick;

  YYYY= val/(12*31+31+1);
  val -= YYYY*(12*31+31+1);

  MM= val/31;
  val -= MM*31;

  DD= val;

  format(date, DATE_MAXLEN+1, "%s%d-%s%d-%d", (DD<10)?("0"):(""), DD, (MM<10)?("0"):(""), MM, YYYY);

  return 1;
}

Natomiast należy zwrócić uwagę na mnożnik roku. Jest on celowo zawyżony żeby konwersja była dwukierunkowa.

Uzyskanej liczby nie należy więc traktować jako ilości dni od 1 stycznia 1 roku.

Porównywanie liczb nie będzie obarczone błędem do 28 dni różnicy pomiędzy porównywanymi datami (liczbami).

Przy większych różnicach będzie występować coraz większa skala błędu co do ilosci dni.

 

Można oczywiście zmienić te mnożniki na "bardziej prawidłowe" i przyjąć, że 1 rok to np 365 dni, a nie 404 (12*31+31+1),

ale wówczas przy zamianie daty na liczbę i liczby na datę szybko zorientujemy się, że otrzymaliśmy inną datę.

 

Z przyjętymi przeze mnie mnożnikami konwersja jest dwukierunkowa.

 

Problem wynika z tąd, że miesiące nie mają równej ilości dni, a do tego występują jeszcze lata przestępne.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×