Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 30-10-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Usa esta unidad:
Código Delphi [-]
unit lpDates;

interface

uses  sysutils, dateutils, Controls, windows;


{------------------------------------------------------------------------------
  hora en que se debe adelantar el reloj : InicioVeranoSpain
  hora en se debe atrasar el reloj: FinVeranoSapin
-------------------------------------------------------------------------------}
function InicioVeranoSpain(Year:Word):TDateTime; // solo para peninsula española
function FinVeranoSpain(Year:Word):TDateTime; // solo para peninsula española

type THorario = (hInvalida, hVerano,hDesconocida, hInvierno);

function EstamosEnhorarioVerano(const TheDate:TDateTime):THorario;

implementation

function InicioVeranoSpain(Year:Word):TDateTime; // solo para peninsula española
var Week:Word;
begin
  Result:= EncodeDateTime(Year, 1, 1,23,59,59,999);
  Week := 6; // preguntamos si el mes tiene 6 semanas

  //  averiguamos el último domingo de marzo
  while not TryEncodeDayOfWeekInMonth(Year,
                                      3, // mes marzo
                                      Week, // ultima semana del mes
                                      7, // domingo
                                      Result)
  do
    Dec(Week);
  Result := RecodeTime(Result,2,0,0,0); // en canarias sería a las 01:00
  // XX/03/XXXX 02:00:00.000
  // en esta fecha se debe adelantar el reloj una hora.end;

function FinVeranoSpain(Year:Word):TDateTime; // solo para peninsula española
var Week:Word;
begin
  Result:= EncodeDateTime(Year, 1, 1,23,59,59,999);
  Week := 6; // preguntamos si el mes tiene 6 semanas

  //  averiguamos el último domingo de octubre
  while not TryEncodeDayOfWeekInMonth(Year,
                                      10, // mes octubre
                                      Week, // ultima semana del mes
                                      7, // domingo
                                      Result)
  do
    Dec(Week);
  Result := RecodeTime(Result ,3,0,0,0); // en canarias sería a las 02:00
  // en esta fecha se debe retrasar el reloj una hora.
end;

function EstamosEnhorarioVerano(const TheDate:TDateTime):THorario;
var ValidStart, ValidFinish:TDateTime;
begin

  ValidStart := RecodeTime(InicioVeranoSpain(yearof(TheDate)),0,0,0,0);
  if (TheDate > InicioVeranoSpain(yearof(TheDate))) and (TheDate < ValidStart) then
  begin
    Result := hInvalida;
    // en cuanto llegue a las 2 de la madrugada, el reloj debe pasar a las 3 de
    // la madrugada, por tanto, si la hora está entre las 2 y las 3, es una
    // fecha incoherente.
  end
  else
  begin
    ValidFinish := RecodeTime(FinVeranoSpain(yearof(TheDate)), 2,0,0,0);
    if (TheDate >= ValidStart) and (TheDate < ValidFinish) then
      Result := hVerano
    else if (TheDate > ValidFinish) and (TheDate < FinVeranoSpain(yearof(thedate))) then
      Result := hDesconocida
      {------------------------------------------------------------------------------
        Como se ha retrasado el reloj una hora, todas las horas entre las
        2 de la madrugada y las 3, puede ser tanto de invierno como
        de verano.
      -------------------------------------------------------------------------------}
    else
      Result:= hInvierno;
  end;
end;

end.

No sé de donde pillé las rutinas, yo lo modifiqué un poco.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 30-10-2008 a las 19:42:26.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como determinar si X Fecha esta en Hor. Verano pero en firebird???? AGAG4 Firebird e Interbase 1 05-04-2008 22:17:33
Como saber si estamos conectados a internet JF Sebastian Internet 3 17-01-2007 13:59:06
Ajustes de horario Javier_A Varios 1 30-06-2004 13:31:18
Detectar Horario Verano/Invierno Javinho Varios 5 10-06-2004 16:40:24


La franja horaria es GMT +2. Ahora son las 17:37:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi