Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cambiar solo la hora en Delphi (https://www.clubdelphi.com/foros/showthread.php?t=87278)

JuanOrtega 07-12-2014 16:45:35

Cambiar solo la hora en Delphi
 
Hola estoy tratando de cambiar solo la hora en delphi , me estoy basando en este codigo :

Código Delphi [-]
var
 MyNewTime: _SYSTEMTIME;
begin
// primero llenamos la estructura
 with MyNewTime do
  begin
   wYear        := 2004; // año
   wMonth       := 8;    // agosto
   wDayOfWeek   := 5;    // jueves
   wDay         := 19;   // día del mes
   wHour        := 01;   // hora
   wMinute      := 55;   // minutos
   wSecond      := 00;   // segundos
   wMilliseconds:= 00;   // milisegundos
  end;
// luego la aplicamos
 SetSystemTime(MyNewTime);

A lo que llegue a esto :

Código Delphi [-]
program test;

{$APPTYPE CONSOLE}
{$R *.res}


uses
  System.SysUtils, ShellApi, Windows,Winapi.Messages;

function change_time():string;
var
MyNewTime: _SYSTEMTIME;
begin

with MyNewTime do
begin
wHour := 1;
end;
SetSystemTime(MyNewTime)
end;

begin
  try
    change_time();
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.

El tema es que este codigo no me cambia la hora ni en modo normal ni como administrador , creo que los demas parametros son obligatorios pero yo solo quiero cambiar la hora del sistema no desconfigurar todo.

Nota : Estoy usando Delphi XE2 en Windows Seven

¿ Hay alguna forma de hacer lo que quiero ?

mamcx 07-12-2014 17:30:08

Y para que quieres hacer eso?

ecfisa 07-12-2014 17:52:02

Hola Lepuke.

Tampoco me queda en claro la finalidad... Pero intentá de este modo:
Código Delphi [-]
program test;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

procedure ChangeSysTime(const aTime: TDateTime);
var
  SystemTime: TSystemTime;
begin
  DateTimeToSystemTime(Date + aTime, SystemTime);
  SetLocalTime(SystemTime);
end;

// main
begin
  ChangeSysTime(StrToTime('01:39:10 pm'));
end.

Saludos :)

JuanOrtega 07-12-2014 18:07:29

Funciona pefecto , gracias por la ayuda efcisa.

El unico problema es que tuve que cambiar la linea a :

Código Delphi [-]
ChangeSysTime(StrToTime('09:00:00'));

orodriguezca 08-12-2014 02:20:28

Para que?

No se para que lo necesite Lepuke pero en otra época, cuando aún internet era un lujo y no había mucha divulgación de servidores de tiempo esta era la forma fácil de mantener sincronizada la hora de los PCs de nuestra red local con la hora del servidor.

Casimiro Notevi 08-12-2014 10:40:05

Cita:

Empezado por orodriguezca (Mensaje 486259)
Para que?
No se para que lo necesite Lepuke pero en otra época, cuando aún internet era un lujo y no había mucha divulgación de servidores de tiempo esta era la forma fácil de mantener sincronizada la hora de los PCs de nuestra red local con la hora del servidor.

Nunca se me ocurrió cambiarle la hora al cliente para que esté sincronizado con el servidor, ¿por qué? hay varios motivos, pero uno importante es: ¿y si el cliente está en otro lugar y tiene una hora diferente?

Para tomar la hora del servidor lo que se hace es tomarlo del propio servidor, ejemplo, si guardas una factura con la fecha de la misma, haces un select de la propia base de datos (que está en el servidor, obviamente)
Código SQL [-]
select current_date, current_timestamp
from rdb$database;
De esa forma, da igual la fecha y hora que tenga cada cliente, ya que las fechas y horas se tomarán siempre del servidor.

orodriguezca 08-12-2014 13:32:51

Totalmente de acuerdo contigo casimiro, yo hoy no lo haría de otra forma: Hay que tomar la hora del servidor.

Mi anotación iba encaminada a que en otra época, cuando no había Internet y lo mas ambicioso que se podia hacer era construir una red de area local, cuando no existía un gestor de bases de datos sino que los .dbf y los .dat eran los reyes de los datos era, en ese entonces, buena idea tener la hora de los pc sincronizados. Hoy no se me ocurre una buena excusa para lo mismo.

Casimiro Notevi 08-12-2014 13:43:53

Épocas prehistóricas :rolleyes:

orodriguezca 08-12-2014 13:44:59

Bueno, meditando un poco más encontré una excusa: Se puede tener más de un servidor.

Es posible que una sola transacción de origen a la actualización de más de una base de datos y cada una de ella sobre diferentes servidores. Suponiendo que cada cada uno de estos servidores estén en la misma sala seria deseable que cada uno de ellos tuvieran la misma fecha-hora. Bueno, eso pienso Yo. Aunque hoy día esa es una preocupación menor porque finalmente todos se sincronizan con algún servidor de tiempo cuando se instala el SO.

Casimiro Notevi 08-12-2014 13:49:34

Es que no puedes meter un programita que cambie la hora a un servidor ¿qué hora?, ¿la que alguien le diga?
Debe ser algo automático, lo más exacto posible y totalmente ajeno a los clientes.
Es que eso se convierte en un coladero de seguridad tremendo. Y que traerá muchos problemas, seguro.

orodriguezca 08-12-2014 13:51:45

Cita:

Empezado por Casimiro Notevi (Mensaje 486268)
Épocas prehistóricas :rolleyes:

:D:D

Y sin embargo es de las correcciones más frecuentes que se le hacen a los nuevos desarrolladores (java o dot net) porque siempre tienden tomar la hora del servidor/PC sobre el que corre la aplicación y no de la base de datos.

Casimiro Notevi 08-12-2014 13:56:49

Cita:

Empezado por orodriguezca (Mensaje 486271)
Y sin embargo es de las correcciones más frecuentes que se le hacen a los nuevos desarrolladores (java o dot net) porque siempre tienden tomar la hora del servidor/PC sobre el que corre la aplicación y no de la base de datos.

No lo sabía :)

orodriguezca 08-12-2014 13:58:50

Cita:

Empezado por Casimiro Notevi (Mensaje 486270)
Es que no puedes meter un programita que cambie la hora a un servidor ¿qué hora?, ¿la que alguien le diga?
Debe ser algo automático, lo más exacto posible y totalmente ajeno a los clientes.
Es que eso se convierte en un coladero de seguridad tremendo. Y que traerá muchos problemas, seguro.

Por eso digo, hoy no lo hace un "programita", es función del sistema operativo y casi siempre contra un servidor NTP ya sea sobre Internet o interno .


PosTdata: Seria bueno que el compañero Lepuke nos contara sus intenciones y salimos de la intriga y las conjeturas.

Casimiro Notevi 08-12-2014 14:05:16

Cita:

Empezado por orodriguezca (Mensaje 486273)
Por eso digo, hoy no lo hace un "programita", es función del sistema operativo y casi siempre contra un servidor NTP ya sea sobre Internet o interno .

Siempre he procurado tener aislados los servidores de internet. Conectar solamente para alguna actualización y volver a dejarlo sin internet. Si tienen que conectar desde fuera es mejor poner un servidor web intermedio y que sea éste el que se conecte al servidor de bases de datos. Pero siempre aislar el servidor de bases de datos de internet.


La franja horaria es GMT +2. Ahora son las 15:15:12.

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