Function PonerEnHora(Fecha:TDateTime):Boolean;
Var Infos :TSystemTime;
Zone :TTimeZoneInformation;
Rdo :Integer;
Begin
Result:=False;
Rdo:=GetTimeZoneInformation(Zone);
// Fecha es Hora local =>se ajusta el decalaje para obtener la hora absoluta
Case Rdo Of
TIME_ZONE_ID_UNKNOWN : Fecha:=Fecha+( Zone.Bias /(24*60));
TIME_ZONE_ID_STANDARD : Fecha:=Fecha+((Zone.Bias+Zone.StandardBias)/(24*60));
TIME_ZONE_ID_DAYLIGHT : Fecha:=Fecha+((Zone.Bias+Zone.DaylightBias)/(24*60));
Else
Exit;
End;
Infos.wYear :=YearOf (Fecha);
Infos.wMonth :=MonthOf (Fecha);
Infos.wDayOfWeek :=DayOfWeek (Fecha);
Infos.wDay :=DayOf (Fecha);
Infos.wHour :=HourOf (Fecha);
Infos.wMinute :=MinuteOf (Fecha);
Infos.wSecond :=SecondOf (Fecha);
Infos.wMilliseconds :=MillisecondOf (Fecha);
Result:=SetSystemTime(Infos);
End;
(se necesita tener derechos administrativos para actualizar la hora del sistema)
y la llamada sería:
If PonerEnHora(EncodeDate(2011,4,22)
+EncodeTime(17,0,0,0))
Then ShowMessage('Puesta en hora OK')
Else ShowMessage('Error al poner en hora');