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