Szerző Téma: Mktime és Date függvények (Unix-idõ)  (Megtekintve 2704 alkalommal)

Mktime és Date függvények (Unix-idõ)
« Dátum: 2012. Május 27. - 21:51:08 »
0 Show voters
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%91
nos í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;
}
« Utoljára szerkesztve: 2012. Május 27. - 21:56:38 írta hegdavid95 »

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
Mktime és Date függvények (Unix-idõ)
« Válasz #1 Dátum: 2012. Május 27. - 22:04:42 »
0 Show voters
Ez bonyolult de jó lett!  :D  :yes:

Mktime és Date függvények (Unix-idõ)
« Válasz #2 Dátum: 2012. Május 27. - 23:55:15 »
+1 Show voters
Idézetet írta: ZyZu date=1338149082\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"22065\" data-ipsquote-contentclass=\"forums_Topic
Ez bonyolult de jó lett!  :D  :yes:
 
Nem az, de hasznos dolog. Amúgy ezek a kódok nem a YSI_misc-bõl vannak, nem?

Mktime és Date függvények (Unix-idõ)
« Válasz #3 Dátum: 2012. Május 28. - 08:20:11 »
0 Show voters
Nos régen találtam már ezeket és akkor gondoltam elteszem mert hasznos lehet, de nemigazán emlékszek már rá honnan van.
« Utoljára szerkesztve: 2012. Május 28. - 08:32:17 írta hegdavid95 »

Nem elérhető IXT

  • 2502
  • Steph Curry
    • Profil megtekintése
Mktime és Date függvények (Unix-idõ)
« Válasz #4 Dátum: 2012. Május 28. - 08:33:45 »
0 Show voters
szép ment a + !


Neem  :D Szerintem ez egy hasznos kis munka a számodról,de az is biztos hogy semmit nem értek belõle.  :D

Mktime és Date függvények (Unix-idõ)
« Válasz #5 Dátum: 2012. Június 09. - 16:10:27 »
0 Show voters
Egy óra mennyi Unixban mérve?

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
Mktime és Date függvények (Unix-idõ)
« Válasz #6 Dátum: 2012. Június 09. - 16:18:43 »
0 Show voters
Hány másodperc egy óra?
3600

Mktime és Date függvények (Unix-idõ)
« Válasz #7 Dátum: 2012. Június 09. - 16:52:32 »
0 Show voters
Valahogy úgy igen, kössz.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal