Unix idõ
Üdv most szeretnék bemutatni egy hasznos idõmeghatározó módszert.
Pontosabban egy informatikában használt a dátumok könnyebb tárolására létrehozott módszert.
Az Unix-idõt.
Ennek lényege, hogy a dátumokat ne egy hosszú sok külön álló számmal(év/hónap/nap óra/perc/másodperc) tároljuk, hanem egyetlen számmal, mégpedig úgy, hogy ez a szám
1970. 01. 01. 00:00:00 óta eltelt másodpercek számát adja meg, igen ez egy elég nagy szám, viszont elõnye, hogy csak egyetlen adatban eltárolhatunk vele 1970-tõl minden dátumot
Annak, aki többet szeretne megtudni errõl annak ajánlom figyelmébe a következõ linket:
http://hu.wikipedia.org/wiki/Unix-id%C5%91nos íme a két hasznos kis függvény:
A gettime függvény az Unix idõvel tér vissza, ha nem adunk meg neki semmilyen paramétert.
Így tehát ez nekünk tökéletesen megfelel arra a célra, hogy megtudjuk, hogy abban a pillanatban mennyi is az Unix idõ.
például:
new unixtime = gettime();
A másik, amivel ezt az idõformátumot vissza lehet konvertálni a normális általunk érthetõ formába:
stock date(timestamp, &f_day, &f_month, &f_year, &f_hour, &f_min, &f_sec)
{
new s_year=1970, s_day=0, s_month=0, s_hour=0, s_mins=0;
new days_of_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
while(timestamp > 31622400)
{
timestamp -= 31536000;
if(((s_year % 4 == 0) && (s_year % 100 != 0)) || (s_year % 400 == 0)) timestamp -= 86400;
s_year++;
}
if(((s_year % 4 == 0) && (s_year % 100 != 0)) || (s_year % 400 == 0))
{
days_of_month[1] = 29;
}
else
{
days_of_month[1] = 28;
}
while(timestamp > 86400)
{
timestamp -= 86400, s_day++;
if(s_day == days_of_month[s_month]) s_day=0, s_month++;
}
while(timestamp>60)
{
timestamp -= 60, s_mins++;
if(s_mins == 60) s_mins=0, s_hour++;
}
f_day = s_day + 1;
f_month = s_month + 1;
f_year = s_year;
f_hour = s_hour;
f_min = s_mins;
f_sec = timestamp;
return true;
}
Szerintem eléggé nyilvánvaló, az elsõ paraméter a konvertálandó Unix idõ, a többi 6 pedig az aminek az értékeit módosítja a kapott dátumra.
Azonban elõfordulhat, hogy nekünk nem a jelenlegi Unix idõre van szükségünk, és a 6 általunk ismert dátum paraméterekbõl (év/hó/nap /óra/perc/másodperc)
meg kellene határoznunk az Unix-idõt. Nos a következõ függvény pontosan ezt a célt szolgálja. Visszatérési értéke maga a paraméterekbõl kiszámolt Unix idõ.
stock mktime(m_hour, m_minute, m_second, m_day, m_month, m_year)
{
new timestamp2;
timestamp2 = m_second + (m_minute * 60) + (m_hour * 3600);
new days_of_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(((m_year % 4 == 0) && (m_year % 100 != 0)) || (m_year % 400 == 0))
{
days_of_month[1] = 29;
}
else
{
days_of_month[1] = 28;
}
new days_this_year = 0;
days_this_year = --m_day;
if(m_month > 1)
{
for(i = 0; i < m_month - 1; i++)
{
days_this_year += days_of_month;
}
}
timestamp2 += days_this_year * 86400;
for(new j = 1970; j < m_year; j++)
{
timestamp2 += 31536000;
if(((j % 4 == 0) && (j % 100 != 0)) || (j % 400 == 0)) timestamp2 += 86400;
}
return timestamp2;
}