PDA

Ver la Versión Completa : Hora del Sistema (Bios) no de Windows


zfer
11-08-2006, 17:02:21
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.


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
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
: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:


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
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
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
Bueno, he hecho un sencillo test:


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
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
Aunque de como va esto en linux seguro que sabes tu mas que yo ...
No creas, soy un novato total.

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.

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.