script date

Post your Custom Scripts or Packages.

Moderator: POL Developer

Post Reply
guialtran
Grandmaster Poster
Posts: 120
Joined: Wed Jul 30, 2008 12:42 pm

script date

Post by guialtran »

Code: Select all

use os;
use uo;

    //Um outro algoritmo para determinar se o ano é bissexto ou não:
    //Se (ano módulo 4 é 0  e (ano módulo 400==0 ou ano módulo 100 diferente 0))
    //então
    //Imprimi ? "Ano Bissexto";
    //senão
    //Imprimir ? "Ano não é Bissexto";

program date(character)
    //Todos os meses transformados em segundos.
    var year := {2678400,2419200,2678400,2592000,2678400,2592000,2678400,2678400,2592000,2678400,2592000,2678400};
    //Todos os meses de um ano bissexto transformados em segundos.
    var leap_year := {2678400,2505600,2678400,2592000,2678400,2592000,2678400,2678400,2592000,2678400,2592000,2678400};
    //Uma formatação de data caso seja necessário enviar a struct para outro script.
    var date := struct{"second":=0,"minute":=0,"hour":=0,"day":=1,"month":=1,"year":=1970};
    //O tempo atual em segundos.
    var time := polcore().systime;
    //Caso seja usado para o Brasil, vc deve acrescentar o fuso em segundos,Fuso horário do brasil - 3 horas
    //time := time - 3*60*60; 
    // aqui ele verifica quantos (3 amos normais mais um bissexto) cabem no tempo total.
    var quociente := cint(time / 126230400);// 126230400 é igual a 3 anos normais + 1 bissexto, transformados em segundos
    // aqui ele remove os N (4 anos + 1 dia) que cabem dentro do tempo total, sobrando assim algo menor ou igual a 4 anos
    time := ( time - ( quociente * 126230400 )) ;// time = quantos 4 anos cabem no total
    //agora ele transforma o 4 anos +1 dia em anos na variável.
    date.year := ( date.year + quociente*4 );
    //Agora ele verifica se os últimos anos restantes são normais ou bissexto.
    while(time >= 31536000)
        if(date.year % 4 == 0 and (date.year % 400 == 0 or date.year % 100 != 0))
            date.year := ( date.year + 1 );
            time := ( time - 31622400 );
        else
            date.year := ( date.year + 1 );
            time := ( time - 31536000 );
        endif
    endwhile
    //quando não podermos mais extrair anos normais ou anos bissextos do tempo total, devemos extrair os meses verificando se ele é um Mês de um ano bissexto.
    if(date.year % 4 == 0 and (date.year % 400 == 0 or date.year % 100 != 0) )
        while(time >= leap_year[date.month] )
            time := ( time - leap_year[date.month] );
            date.month := ( date.month + 1 );
        endwhile
    else
        while(time >= year[date.month] )
            time := ( time - year[date.month] );
            date.month := ( date.month + 1 );
        endwhile
    endif
    //depois que os anos e meses foram computados basta fazer o restante da subtração para saber o dia, hora, minutos e segundos.
    // aqui ele pega o dia
    quociente := cint( time / 86400 );
    time := ( time - ( quociente * 86400 ));
    date.day := (date.day + quociente );
    // aqui ele pega a hora
    quociente := cint( time / 3600 );
    time := ( time - ( quociente * 3600 )) ;
    date.hour := (date.hour + quociente );
    // aqui ele pega os minutos e segundos
    quociente := cint( time / 60 );
    date.minute := (date.minute + quociente );
    date.second := ( time - ( quociente * 60 )) ;

    SendSysMessage( character," Clock  "+date.hour+":"+date.minute+":"+date.second, 3, 33 );
    SendSysMessage( character," Date "+date.month+"/"+date.day+"/"+date.year, 3, 33 );
endprogram
Post Reply