Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con datetime (https://www.clubdelphi.com/foros/showthread.php?t=92402)

MacStreet 20-10-2017 00:00:58

Problema con datetime
 
Hola a toda la comunidad de clubdelphi, tengo un problema al usar el datetime, anteriormente usaba este codigo :
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
fin:boolean;
a:TDateTime;
 f : TextFile;
begin

a:=DateToStr('10/09/2017');
// fechaes:'dia/mes/año'
if date >= a then
begin
fin:=true;
Application.Terminate();
end;
end;

funciona perfectamente y todo, el problema viene a ser cuando tu cambias la fecha de tu ordenador la cambias al dia : "10/09/2017"
vuelve a funcionar la aplicacion, asi ya se haya vencido, estube pensando en que ya no usara la fecha por defecto del ordenador si no que usé la fecha del internet (obtener hora desde internet ) pero no sabria como cambiar el valor por defecto que tiene el datetime, estube viendo y me dijieron que use el "IdSNTP1" .
Gracias por adelantado :D

identsoft 20-10-2017 10:37:12

Has probado a cambiar el oredn de la fecha:
a:=DateToStr('2017/09/10') ?

identsoft 20-10-2017 10:38:59

perdón.
a:=strtodate('2017/09/10')

Guti13 20-10-2017 11:28:34

Comparación de fechas
 
Yo personalmente te recomendaría usar CompareDate combinado con EncodeDate, algo así

Código:

If CompareStr(Today, EncodeDate(2017,9,10)=LessThanValue Then
Begin
    ......
End


ecfisa 20-10-2017 16:08:22

Hola.
Cita:

Empezado por MacStreet (Mensaje 521857)
...
funciona perfectamente y todo, el problema viene a ser cuando tu cambias la fecha de tu ordenador la cambias al dia : "10/09/2017"
vuelve a funcionar la aplicacion, asi ya se haya vencido, estube pensando en que ya no usara la fecha por defecto del ordenador si no que usé la fecha del internet (obtener hora desde internet ) pero no sabria como cambiar el valor por defecto que tiene el datetime, estube viendo y me dijieron que use el "IdSNTP1" .
...

Código Delphi [-]
...
implementation

uses IdSNTP;

function iNetDateTime(const aHost: string) : TDateTime;
var
  idSNTP: TIdSNTP;
begin
  idSNTP:= TIdSNTP.Create(nil);
  try
    idSNTP.Host := aHost;
    Result := idSNTP.DateTime;
  finally
    idSNTP.Free;
  end;
end;
...

Ejemplo de uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  dt: TDateTime;
begin
  try
    dt := iNetDateTime('time.windows.com');
    ShowMessage( DateToStr(dt) );
  except // manejar el problema...
    ShowMessage('Error obteniendo la fecha');
  end;
end;

En el siguiente enlace tenes una lista con servidores horarios: Servidores NTP

Saludos :)

MacStreet 20-10-2017 19:10:10

Cita:

Empezado por ecfisa (Mensaje 521876)
Hola.


Código Delphi [-]
...
implementation

uses IdSNTP;

function iNetDateTime(const aHost: string) : TDateTime;
var
  idSNTP: TIdSNTP;
begin
  idSNTP:= TIdSNTP.Create(nil);
  try
    idSNTP.Host := aHost;
    Result := idSNTP.DateTime;
  finally
    idSNTP.Free;
  end;
end;
...

Ejemplo de uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  dt: TDateTime;
begin
  try
    dt := iNetDateTime('time.windows.com');
    ShowMessage( DateToStr(dt) );
  except // manejar el problema...
    ShowMessage('Error obteniendo la fecha');
  end;
end;


Saludos :)

Lo probaré ,muchas gracias por la ayuda!

MacStreet 20-10-2017 19:14:15

Cita:

Empezado por identsoft (Mensaje 521863)
perdón.
a:=strtodate('2017/09/10')

Si, pero como dijé :
mi aplicacion funcionara solo hasta el dia : 10/09/2017 luego de esa fecha se cierra automaticamente.
pero si cambio la fecha del ordenador, puedo volver a usar la aplicacion por eso que queria ya no usar ese metodo, si no otro y no sabria como crear otro metodo :(

MacStreet 22-10-2017 00:45:52

Cita:

Empezado por ecfisa (Mensaje 521876)
Hola.


Código Delphi [-]
...
implementation

uses IdSNTP;

function iNetDateTime(const aHost: string) : TDateTime;
var
  idSNTP: TIdSNTP;
begin
  idSNTP:= TIdSNTP.Create(nil);
  try
    idSNTP.Host := aHost;
    Result := idSNTP.DateTime;
  finally
    idSNTP.Free;
  end;
end;
...

Ejemplo de uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  dt: TDateTime;
begin
  try
    dt := iNetDateTime('time.windows.com');
    ShowMessage( DateToStr(dt) );
  except // manejar el problema...
    ShowMessage('Error obteniendo la fecha');
  end;
end;

En el siguiente enlace tenes una lista con servidores horarios:

Saludos :)

No me funciona :( osea si obtiene la fecha y todo, pero lo que yo quiero hacer es que mi aplicacion al detectar el dia "10/09/2017" se cierre .
espero que me entiendas :/

Casimiro Notevi 22-10-2017 16:28:44

Cita:

Empezado por MacStreet (Mensaje 521921)
espero que me entiendas :/

http://www.clubdelphi.com/foros/guiaestilo.php

mamcx 22-10-2017 21:40:17

Esa fecha la pones TU o el USUARIO?

Porque si la pones TU, estas auto-infligiendote el problema. Es muy simple: Utiliza formatos no ambiguos, y se EXPLICITO en como serializas y deserializas la informacion.

En el caso de las fechas, se usa el formato ISO. Y cuando lees DEBES ESPECIFICAR EN QUE FORMATO!

Tipo:

Código Delphi [-]
LeerFecha('2001-01-01T01:05:01', FormatoISO)

ecfisa 23-10-2017 18:40:33

Hola.
Cita:

Empezado por MacStreet (Mensaje 521921)
No me funciona :( osea si obtiene la fecha y todo, pero lo que yo quiero hacer es que mi aplicacion al detectar el dia "10/09/2017" se cierre .
espero que me entiendas :/

Ah, pero yo había entendido que el problema era que no querías tomar la hora del sistema por que la podian cambiar y no que ignorabas como comparar las dos fechas.

En ese caso:
Código Delphi [-]
uses IdSNTP;

function ExpiredDate(const vto: TDateTime; const aHost: string): Boolean;
var
  idSNTP: TIdSNTP;
  dt: TDateTime;
begin
  idSNTP:= TIdSNTP.Create(nil);
  try
    idSNTP.Host := aHost;
    dt := idSNTP.DateTime;
  finally
    idSNTP.Free;
  end;
  Result := dt >= vto;
end;

Ejemplo de uso:
Código Delphi [-]
...
begin
  if ExpiredDate( StrToDate('10/09/2017'), 'time.windows.com' ) then
    Application.Terminate
  else
    ShowMessage('Todo ok');
  ...

Saludos :)


La franja horaria es GMT +2. Ahora son las 23:35:34.

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