Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-05-2004
Javinho Javinho is offline
Registrado
 
Registrado: may 2004
Posts: 3
Poder: 0
Javinho Va por buen camino
Lightbulb Detectar Horario Verano/Invierno

Buenas!
Estoy desarrollando una aplicación en delphi 5.0 y necesito detectar el cambio de horario de verano a invierno y viceversa.
Con un timer miro la hora del sistema cada cierto tiempo. ¿estamos en horario de verano o de invierno?
¿alguien me puede dar una pista?
Responder Con Cita
  #2  
Antiguo 26-05-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
Talking Pues eso es segun

Por que varia en ciertos Paises, supongamos aqui en Mexico, los del Norti, mas bien unos estados del Norti del pais se pasan por ahi el horario de verano, mi recomendacion seria que fuera a cambio de Fecha no de hora, cuando prendas la maquina y es es la fecha de horario de verano le aumentas una hora y al revez, como la vez...
__________________
saludos desde Puebla Mexico..
asanxt@hotmail.com
"como siempre a sus ordenes y siempre con buena cara"
'lolita me excitas, perversa piel de melocotón'
Responder Con Cita
  #3  
Antiguo 26-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Javinho
¿estamos en horario de verano o de invierno?
Ahora, en horario de verano. En general quizá te sirva esta función:


Código Delphi [-]
(*
  Devuelve true si Date está dentro del horario
  de verano y false en caso contrario
*)
function WithinDayLight(Date: TDate): Boolean;
var
  tzInfo: TTimeZoneInformation;
  StandardDate: TDate;
  DayLightDate: TDate;

begin
  GetTimeZoneInformation(tzInfo);

  DaylightDate := EncodeDate(
    2004,
    tzInfo.DaylightDate.wMonth,
    tzInfo.DaylightDate.wDay
  );

  StandardDate := EncodeDate(
    2004,
    tzInfo.StandardDate.wMonth,
    tzInfo.StandardDate.wDay
  );

  Result := (Date >= DayLightDate) and (Date < StandardDate);
end;

// Saludos
Responder Con Cita
  #4  
Antiguo 01-06-2004
Javinho Javinho is offline
Registrado
 
Registrado: may 2004
Posts: 3
Poder: 0
Javinho Va por buen camino
Hola,
muchas gracias por las respuestas,
utilizando esa función, roman, el cambio de horario de verano a invierno lo hace el 5 de octubre y no el 31 de octubre (último fin de semana de octubre) que es el correcto. Del mismo modo, el cambio de invieno a verano lo hace el 5 de marzo y no el 28 de marzo (último fin de semana de marzo).
No se por qué toma el día 5 como referencia.
¿es por algo de windows?¿configuración regional?
Seguiré investigando a partir de ahí.
Gracias
Responder Con Cita
  #5  
Antiguo 01-06-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
La función GetTimeZoneInformation simplemente toma los datos de la configuración regional del sistema de manera que yo empezará revisando ésta.

// Saludos
Responder Con Cita
  #6  
Antiguo 10-06-2004
Javinho Javinho is offline
Registrado
 
Registrado: may 2004
Posts: 3
Poder: 0
Javinho Va por buen camino
Ahora si

Hola!
Finalmente lo he conseguido así:

Código:
 

(*
  Devuelve true si Date está dentro del horario
  de verano y false en caso contrario
*)
function EsHorarioVerano(Date: TDate): Boolean;
var
  tzInfo: TTimeZoneInformation;
  Horario: DWORD;
begin
  Horario:= GetTimeZoneInformation(tzInfo);
  if Horario = TIME_ZONE_ID_DAYLIGHT then
	Result:= True
  else
	Result:= False;
end;
 
:)
No era un problema de configuración regional.
El problema estaba en el formato que se utilizaba.
No era el 5 de octubre sino el último domingo de octubre.

Copiado de la ayuda de windows de 'GetTimeZoneInformation' (StandarDate)
Cita:
Day-in-month format is specified by setting the wYear member to zero,
setting the wDayOfWeek member to an appropriate weekday,
and using a wDay value in the range 1 through 5 to select the correct day in the month.
Using this notation, the first Sunday in April can be specified,
as can the last Thursday in October (5 is equal to "the last").


Gracias
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 02:44:19.


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