[Pedido] Converter gettime() para data e hora
#1

Alguйm por acaso sabe algum cуdigo que converte informaзхes de gettime() em data e hora?? Ficarei grato se alguйm tiver o mesmo.
Reply
#2

PHP код:
// Convert UNIX time to human readable time
stock convertTimestamptimestamp_form=)
{
    
timestamp -= 10800;
    new 
year=1970day=0month=0hour=0mins=0sec=0;

    new 
days_of_month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    new 
names_of_month[12][10] = {"Janeiro","Fevereiro","MarГ§o","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"};
    new 
returnstring[32];

    while(
timestamp>31622400){
        
timestamp -= 31536000;
        if ( ((
year == 0) && (year 100 != 0)) || (year 400 == 0) ) timestamp -= 86400;
        
year++;
    }

    if ( ((
year == 0) && (year 100 != 0)) || (year 400 == 0) )
        
days_of_month[1] = 29;
    else
        
days_of_month[1] = 28;


    while(
timestamp>86400){
        
timestamp -= 86400day++;
        if(
day==days_of_month[month]) day=0month++;
    }

    while(
timestamp>60){
        
timestamp -= 60mins++;
        if( 
mins == 60mins=0hour++;
    }

    
sec=timestamp;

    switch( 
_form ){
        case 
1format(returnstring31"%02d/%02d/%d %02d:%02d:%02d"day+1month+1yearhourminssec);
        case 
2format(returnstring31"%s %02d, %d, %02d:%02d:%02d"names_of_month[month],day+1,yearhourminssec);
        case 
3format(returnstring31"%d %c%c%c %d, %02d:%02d"day+1,names_of_month[month][0],names_of_month[month][1],names_of_month[month][2], year,hour,mins);
        case 
4format(returnstring31"%02d.%02d.%d-%02d:%02d:%02d"day+1month+1yearhourminssec);
        default: 
format(returnstring31"%02d:%02d:%02d %02d/%02d/%d"hourminssecday+1month+1year);
    }

    return 
returnstring;

Reply
#3

Obrigado. Adicionei reputaзгo.

@Edit
Tem um pequeno probleminha, ele tб retornando uma data MUITO ANTIGA, ela me retorna ano 01/03/1970.
Reply
#4

Use CTime plugin, todas as includes pra timestamp sгo falhas, usando CTime vocк pode ficar tranquilo quanto а funcionalidade do seu cуdigo.

Aqui vai uma funзгo minha que fiz pro meu projeto e um exemplo:

Код:
public OnPlayerConnect(playerid)
{
new strTime[32], boasvindas[128]; GetDateFromTime(gettime(), strTime); format(boasvindas, 128, "Olб, seja bem vindo, a data de hoje й %s!", strTime); SendClientMessage(playerid, -1, boasvindas); return 1;
} stock GetDateFromTime(timestamp, string[32]) { new tm <tmStamp>; localtime(Time:timestamp, tmStamp); strftime(string, sizeof(string), "%d/%m/%y", tmStamp); //retorna dd/mm/aaaa return 1; }
Jamais use include de timestamp, includes sгo falhas, bugadas e mais lentas. Caso queira mudar o formato da data obtida, adcionar hora ou outras coisas, basta olhar os especificadores do strftime
Reply
#5

Sу tem um problema Leon, o mesmo nгo retorna uma data verdadeira. Ele acaba retornando uma data muito antiga.
Reply
#6

Quote:
Originally Posted by pWesley
Посмотреть сообщение
Sу tem um problema Leon, o mesmo nгo retorna uma data verdadeira. Ele acaba retornando uma data muito antiga.
Deleta esse cуdigo que o lуs passou, baixa o CTime plugin, dб #include <ctime> depois de botar a include na sua pasta do pawno, bota o ctime nos plugins do seu server.cfg e usa meu cуdigo pra fazer o que vocк quer...
Reply
#7

Quote:
Originally Posted by ipsLeon
Посмотреть сообщение
Deleta esse cуdigo que o lуs passou, baixa o CTime plugin, dб #include <ctime> depois de botar a include na sua pasta do pawno, bota o ctime nos plugins do seu server.cfg e usa meu cуdigo pra fazer o que vocк quer...
Foi exatamente o que eu fiz. E mesmo assim, ele me retorna 24/03/1970.
Reply
#8

Quote:
Originally Posted by pWesley
Посмотреть сообщение
Foi exatamente o que eu fiz. E mesmo assim, ele me retorna 24/03/1970.
Me mostra seu cуdigo por favor...
Reply
#9

Vocк sу quer que retorne a data em uma string?
Reply
#10

Eu dei uma modificada no seu cуdigo Leon, ficou assim:

pawn Код:
GetDateFromTime(timestamp, string[32])
{
    new tm <tmStamp>;
    localtime(Time:timestamp, tmStamp);

    strftime(string, sizeof(string), "%d/%m/%Y - %H:%M:%S", tmStamp); //retorna dd/mm/aaaa
    return 1;
}
Eu uso dessa forma:

pawn Код:
static vString[32];
GetDateFromTime(APlayerData[playerid][pExpira] - gettime(), vString);
format(tString, sizeof(tString), "SERVER: Vocк й um Player %s, o mesmo expira em %s.", RankVIP(APlayerData[playerid][pVIP]), vString);
Reply
#11

Quote:
Originally Posted by pWesley
View Post
Eu dei uma modificada no seu cуdigo Leon, ficou assim:

pawn Code:
GetDateFromTime(timestamp, string[32])
{
    new tm <tmStamp>;
    localtime(Time:timestamp, tmStamp);

    strftime(string, sizeof(string), "%d/%m/%Y - %H:%M:%S", tmStamp); //retorna dd/mm/aaaa
    return 1;
}
Eu uso dessa forma:

pawn Code:
static vString[32];
GetDateFromTime(APlayerData[playerid][pExpira] - gettime(), vString);
format(tString, sizeof(tString), "SERVER: Vocк й um Player %s, o mesmo expira em %s.", RankVIP(APlayerData[playerid][pVIP]), vString);
Dб um printf nesse pExpira pois deve ter algo de errado com ele, eu criei um macro pra converter dias pra segundos, pode ser que seja ъtil pra vocк:

Quote:

#define DaysToSeconds(%0) (%0 * 86400)

Com isso, fica mais fбcil de converter dias pra adcionar no timestamp, por exemplo, caso vocк queira criar um vip que dure 30 dias a partir da data de hoje ficaria assim:

Code:
#define DaysToSeconds(%0)	(%0 * 86400)

APlayerData[playerid][pExpira] = gettime() + DaysToSeconds(30);
Й bem fбcil de usar e dб super certo
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)