PDA

Ver la Versión Completa : Diferencia 2 Dias entre Tdatetime (delphi) y Datetime (SQL server)


sinalocarlos
09-05-2007, 03:17:08
Buen Día Foro

Apelo a la experiencia de la comunidad.

Resulta, pues, que cargo un archivo de excel con una serie de datos, entre ellos viene una columna fecha, la cual para comodidad deje el formato configurable, esto es lo pueden subir '2007/05/08' o '08/05/2007', y en la conflagración del sistemita le pido al usuario que formato utiliza, bueno al grano, armo la fecha con:

date:=encodedate(strtoint(copy(fechastr,1,4)),strtoint(copy(fechastr,6,2)),strtoint(copy(fechastr,9, 2)))


para el caso del formato '2007/05/08'

y resulta que me da un valor de 39210, cuando debería de ser 39208, y por que debería ser 39208 me preguntaran, pues el valor lo guardo en una tabla sql y ahí me guarda '2007/05/10', tiro la consulta:
select cast(39210 as datetime)

y me regresa '2007/05/10'

algún consejo sobre que debo revisar, alguien que le haya pasado algo similar???

egostar
09-05-2007, 03:50:20
Hola sinocarlos

Pues si que está raro, el problema creo yo esta en la instrucción CAST, porque Delphi toma bien los valores.

Hice estas dos pruebas y efectivamente, '2007/05/08' nos da 39210.


procedure TForm1.BitBtn1Click(Sender: TObject);
var
fechastr: String;
date: TDateTime;
begin
fechastr := '2007/05/08';
date := encodedate(strtoint(copy(fechastr,1,4)),
strtoint(copy(fechastr,6,2)),
strtoint(copy(fechastr,9, 2)));
ShowMessage(FloattoStr(Date)+'-->'+DatetoStr(date));
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
ShowMessage(DatetoStr(39210));
end;



Salud OS.

sinalocarlos
10-05-2007, 03:00:38
saludos egostar

Disculpas por no contestar antes pero tengo trabajo hasta para repartir.

Pues si, el problema es que SQL server o al menos el mio (SQL Server 2000 SP3 en Ingles con el Collate SQL_Latin1_General_CP1_CI_AS por default), tiene como fecha para el 0 a '1900-01-01 00:00:00.000'
select cast (0 as datetime)

y Delphi (Borland Developer Studio 2006 :)) toma el 0 como 1899/12/30
ShowMessage(DatetoStr(0));


Me sambullire en los chm y mantengo infomada a la comunidad de lo que encuentre