Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Hora del Sistema (Bios) no de Windows (https://www.clubdelphi.com/foros/showthread.php?t=34506)

zfer 11-08-2006 17:02:21

Hora del Sistema (Bios) no de Windows
 
Estoy haciendo un sistema de control de horario para empleados.
Necesito tomar la hora de la BIOS o Sistema, no del reloj de Windows para que los usr no puedan cambiarla.

Porfavor quien pueda ayudarme estaré muy agradecido ;) Saludos. zfer

vtdeleon 11-08-2006 19:30:34

Quizas diga una estupidez, pero tengo entendido que Windows toma la hora y fecha del Bios. :confused:

Saludos

seoane 11-08-2006 20:11:44

La fecha de windows y la de la bios es la misma. Prueba a usar cuentas de usuario limitadas, este tipo de usuarios no tienen permiso para cambiar la hora del sistema.

Casimiro Notevi 11-08-2006 21:50:35

Creo recordar que existen las funciones GetSystemTime y GetLocalTime.

Cita:

The GetLocalTime function retrieves the current local date and time.

The GetSystemTime function retrieves the current system date and time. The system time is expressed in Coordinated Universal Time (UTC).

seoane 11-08-2006 22:02:31

Cita:

Empezado por Casimiro Notevi
Creo recordar que existen las funciones GetSystemTime y GetLocalTime.

:confused: No entiendo, por que usar esas funciones teniendo la función Time que ya llama internamente a la función GetLocalTime y nos devuelve un resultado del tipo TDatetime. En cuanto a la función GetSytemTime nos devuelve el mismo resultado pero haciendo los ajustes necesarios dependiendo de la zona horaria que tengamos configurada. Pero al final todo es el mismo reloj, si se cambia la hora de windows ambas funciones se verán afectadas.

Casimiro Notevi 11-08-2006 22:29:35

Cita:

Empezado por seoane
:confused: No entiendo, por que usar esas funciones teniendo la función Time que ya llama internamente a la función GetLocalTime y nos devuelve un resultado del tipo TDatetime. En cuanto a la función GetSytemTime nos devuelve el mismo resultado pero haciendo los ajustes necesarios dependiendo de la zona horaria que tengamos configurada. Pero al final todo es el mismo reloj, si se cambia la hora de windows ambas funciones se verán afectadas.

La verdad es que no recuerdo del qué, cómo ni por qué... :) ... es que con linux la hora local la eliges según donde estés y es independiente de la hora del sistema... aunque es configurable, a gusto de cada uno.

Aunque pensé, me pareció recordar que en windows también tenías una hora diferente a la del sistema, por eso cuando adelantamos el reloj (o lo atrasamos, según la época del año), ¿se supone que la del sistema no cambia?, no lo recuerdo, la verdad.

Casimiro Notevi 11-08-2006 22:41:11

Bueno, he hecho un sencillo test:

Código:

procedure TForm1.bt1Click(Sender: TObject);
var
  SystemTime: TSystemTime;
begin
  GetSystemTime(SystemTime);
  ShowMessage(FormatDateTime('dd/mm/yyyy hh:nn:ss',SystemTimeToDateTime(SystemTime))  );
  GetLocalTime(SystemTime);
  ShowMessage(FormatDateTime('dd/mm/yyyy hh:nn:ss',SystemTimeToDateTime(SystemTime))  );
end;

Como verás, parece que la hora de windows Sí que es distinta a la del sistema.

seoane 11-08-2006 22:47:15

Cita:

Empezado por Casimiro Notevi
La verdad es que no recuerdo del qué, cómo ni por qué... :) ... es que con linux la hora local la eliges según donde estés y es independiente de la hora del sistema... aunque es configurable, a gusto de cada uno.

Aunque pensé, me pareció recordar que en windows también tenías una hora diferente a la del sistema, por eso cuando adelantamos el reloj (o lo atrasamos, según la época del año), ¿se supone que la del sistema no cambia?, no lo recuerdo, la verdad.

Pues la verdad es que windows si que cambia la hora del sistema, según la época del año, lo cual puede ser un problema cuando se tienen instalado en el mismo equipo un windows y un linux, pues como tu bien dices en linux la hora es independiente de la zona horaria mientras que en windows se corresponde con la hora local, así que cuando pones en hora el reloj en un sistema en el otro puede estar equivocada. Creo recordar que en algunos distribuciones de linux ya preguntan durante el proceso de instalación si el reloj esta en horario UTC o esta ajustado con la hora local, precisamente para evitar estos problemas. :) Aunque de como va esto en linux seguro que sabes tu mas que yo ...

zfer 11-08-2006 22:51:03

Gracias a todos, pero hasta ahora creo q la solución más sensata es bloquear el acceso al cambio de hora a los usuarios. o no?

seoane 11-08-2006 22:54:00

Cita:

Empezado por Casimiro Notevi
Como verás, parece que la hora de windows Sí que es distinta a la del sistema.

Yo no dije que fueran iguales, sino que se calculan a partir del mismo dato. El reloj del equipo (el de la bios) es el que nos devuelve GetLocalTime mientras que el valor que devuelve GetSystemTime es el mismo que devuelve GetLocaltime después de sumarle o restarle una constante que depende de la zona horaria que tengamos configurada y la época del año en que estemos. De esa forma un cambio en la hora afectaría a ambos valores por igual.

zfer 11-08-2006 22:55:33

Y entonces?
 
Cita:

Empezado por Casimiro Notevi
Bueno, he hecho un sencillo test:

Código:

procedure TForm1.bt1Click(Sender: TObject);
var
  SystemTime: TSystemTime;
begin
  GetSystemTime(SystemTime);
  ShowMessage(FormatDateTime('dd/mm/yyyy hh:nn:ss',SystemTimeToDateTime(SystemTime))  );
  GetLocalTime(SystemTime);
  ShowMessage(FormatDateTime('dd/mm/yyyy hh:nn:ss',SystemTimeToDateTime(SystemTime))  );
end;

Como verás, parece que la hora de windows Sí que es distinta a la del sistema.

Bueno tienes razón... pero entonces? cual es systemTime, de donde está tomando la hora... y desde donde se la modifica?

zfer 11-08-2006 22:57:04

Gracias. Entonces que recomiendas para una aplicación de control de horario?
bloquear los premisos a los usuarios para cambiar la hora o bien tomar la hora de un equipo remoto?

seoane 11-08-2006 22:57:37

Cita:

Empezado por zfer
Gracias a todos, pero hasta ahora creo q la solución más sensata es bloquear el acceso al cambio de hora a los usuarios. o no?

Yo creo que si. Mi consejo es utilizar cuentas de usuario limitadas, ya que cualquier sistema que tengas pensado puede echarse abajo si el usuario esta usando una cuenta de administrador. Si tu bloqueas el cambio de hora nada le impide deshacer lo que tu has echo, cambiar la hora y volver a dejarlo como estaba, solo se lo pondrías un poco mas difícil.

Casimiro Notevi 11-08-2006 23:16:53

Cita:

Empezado por seoane
Aunque de como va esto en linux seguro que sabes tu mas que yo ...

No creas, soy un novato total.

Cita:

Empezado por seoane
Yo no dije que fueran iguales, sino que se calculan a partir del mismo dato. El reloj del equipo (el de la bios) es el que nos devuelve GetLocalTime mientras que el valor que devuelve GetSystemTime es el mismo que devuelve GetLocaltime después de sumarle o restarle una constante que depende de la zona horaria que tengamos configurada y la época del año en que estemos. De esa forma un cambio en la hora afectaría a ambos valores por igual.

Es cierto, tienes razón, por eso si se tienen instalados ambos sistema en el mismo ordenador es conveniente elegir en linux la forma de windows, en caso contrario "se pelean" entre ambos para poner el reloj del sistema en hora y al final acaba siendo un desastre.

Cita:

Empezado por seoane
Yo creo que si. Mi consejo es utilizar cuentas de usuario limitadas, ya que cualquier sistema que tengas pensado puede echarse abajo si el usuario esta usando una cuenta de administrador. Si tu bloqueas el cambio de hora nada le impide deshacer lo que tu has echo, cambiar la hora y volver a dejarlo como estaba, solo se lo pondrías un poco mas difícil.

Por suspuesto, un usuario no debe poder cambiar la hora del sistema, por ejemplo, en linux, sólo el administrador, root, o alguien con permisos, tiene la posibilidad de cambiar la hora (y fecha) del sistema.


La franja horaria es GMT +2. Ahora son las 16:04:13.

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