Unixtime Konvertieren - Kleines Problem/Fail

  • Unixtime Konvertieren - Kleines Problem/Fail

    Hallo.
    Ich habe hier nen kleinen Timeban-Fail.
    Undzwar hatte ich damals mal eine Unixtime-Convert Funktion welche einen Unix-Timestamp in ein Datum & Uhrzeit umgewandelt hat.
    Wenn ich nun die Funktion verwende:
    Spoiler anzeigen

    [pwn]
    stock mktime(hour,minute,second,day,month,year)
    {
    new timestamp2;

    timestamp2 = second + (minute * 60) + (hour * 3600);

    new days_of_month[12];

    if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) {
    days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31}; // Schaltjahr
    } else {
    days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31}; // keins
    }
    new days_this_year = 0;
    days_this_year = day;
    if(month > 1) { // No January Calculation, because its always the 0 past months
    for(new i=0; i<month-1;i++) {
    days_this_year += days_of_month;
    }
    }
    timestamp2 += days_this_year * 86400;

    for(new j=1970;j<year;j++) {
    timestamp2 += 31536000;
    if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp2 += 86400; // Schaltjahr + 1 Tag
    }

    return timestamp2;
    }

    stock ConvertUnix(zeitpunkt, &hour, &minute, &second, &day, &month, &year)
    {
    new h = 0, m = 0, s = 0, da = 1, mo = 1, ye = 1970;
    for(;;) { ye++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { ye--; break; } }
    for(;;) { mo++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { mo--; break; } }
    for(;;) { da++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { da--; break; } }
    for(;;) { h++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { h--; break; } }
    for(;;) { m++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { m--; break; } }
    for(;;) { s++; if(((zeitpunkt) - (mktime(h, m, s, da, mo, ye))) < 0) { s--; break; } }
    hour = h; minute = m; second = s; day = da; month = mo; year = ye; return 1;
    }[/pwn]


    Und mich per Timeban Befehl banne, dann kommt folgendes Ergebnis raus (print)

    Quellcode

    1. User Ap0llinaris time banned - Date: 09.06.2012 - Time: 20:59:27

    Hier mal der /tban Befehl..
    Spoiler anzeigen

    [pwn]
    CMD:tban(playerid, params[])
    {
    new pID, grund[64], time, string[128];
    if(sscanf(params, "uis[64]", pID, time, grund))return SendClientMessage(playerid, COLOR_GREY, "* Benutze /tban [SpielerID/Name] [Zeit in Min.] [Grund]");
    if(Spieler[playerid][pAdmin] < 1)return SendClientMessage(playerid, COLOR_GREY, "Du besitzt nicht die benötigten Rechte.");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_GREY, "Der Spieler ist nicht online.");
    if(time < 1 || time > 14400)return SendClientMessage(playerid, COLOR_GREY, "Die Zeit sollte sich zwischen 1 und 14400 liegen. (1 Minute oder 10 Tage)");
    new tBanTime = time * 60;
    tBanTime = tBanTime + gettime();
    Spieler[pID][pTimeBan] = tBanTime;
    new tDay, tMonth, tYear, tHour, tMinute, tSecond;
    ConvertUnix(tBanTime, tHour, tMinute, tSecond, tDay, tMonth, tYear);
    printf("User %s time banned - Date: %02d.%02d.%d - Time: %02d:%02d:%02d", GetName(pID), tDay, tMonth,tYear, tHour, tMinute, tSecond);
    format(string, sizeof(string), "%s wurde von %s für %d Minuten gebannt, Grund: %s", GetName(pID), GetName(playerid), time, grund);
    SendClientMessageToAll(COLOR_DARKRED, string);
    Kick(pID);
    return 1;
    }[/pwn]

    Funktionieren tut alles, nur die Zeit wird nicht richtig angezeigt. :/

    Kann jemand helfen?
    Mit freundlichen Grüßen, Ap0llinaris.

    [Blockierte Grafik: http://img6.imagebanana.com/img/lb4rwabb/newsig111.png]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Ap0llinaris ()