Bug en la Funcion SetDate() 32bits
Posted: Sat Jun 30, 2007 2:16 pm
Hola estimados colegas del foro, tengo el siguiente problema ojala y alguno de ustedes lo haya resuelto, y es un tema del cual ya se hablo pero del que todavia nadie a dado respuesta
Resulta que uso la funcion SETDATE() para el cambio de fecha de Windows el cual lo uso así:
STATIC dInicial ---------->>Al inicio de la aplicacion lo he probado tambien como PUBLIC.
SET DATE TO BRITISH ---------->>Dentro de la Funcion Main
SET CENTURY ON
SET EPOCH TO 2000
dInicial:= Date()
Dentro del sistema cambio la fecha de windows con la misma funcion esto lo hago para revisar la informacion de meses pasados, ya que mi sistema usa una carpeta de informacion por mes de trabajo... aki funciona bien y sin problemas con esta funcion..
FUNCTION CambiaFecha()
LOCAL dVar1:= DATE()
LOCAL oDlg,oGet,oBtn1,oBtn2
LOCAL lSal:= .F.
DEFINE DIALOG oDlg RESOURCE "SELFECHA" TITLE "Cambiar Fecha de Trabajo" OF oWndMain
REDEFINE BTNGET oGet VAR dVar1 ID 102 OF oDlg RESOURCE "B_CALE" SPINNER;
ON UP (++dVar1,oGet:REFRESH()) ON DOWN (--dVar1,oGet:REFRESH());
ACTION (aRect := GetCoors(oGet:hWnd),;
dVar1 := FwCalendar(dVar1,aRect[1],aRect[4],oDlg),;
oGet:REFRESH())
REDEFINE BUTTON oBtn1 ID 107 OF oDlg ACTION (SetDate( DAY( dVar1 ), MONTH( dVar1 ), YEAR( dVar1 ) ), SYSREFRESH(), CambMes(dVar1), CreArchi(), Indexa(), lSal:= .T., oDlg:END())
REDEFINE BUTTON oBtn2 ID 108 OF oDlg ACTION (lSal:= .T., oDlg:END()) CANCEL
ACTIVATE DIALOG oDlg CENTERED VALID (lSal)
Return nil
Hasta aki todo bien..
SetDate( DAY(dInicial), MONTH(dInicial), YEAR(dInicial) ) ---------->> Esto lo hago al salir la aplicacion por si el usuario se olvida de regresar la fecha de windows a la fecha inicial, la cual la tome al principio.
Por una extraña razon al momento de hacer el cambio de fecha la atrasa un dia, y lo hace por cada vez que salgo del programa entre las 9 y 11 de la noche, y en horarios diferentes durante el día, cosa que no pasaba con 16bits, ya revise el código fuente de esta funcion y son exactamente iguales, si hago esto:
SetDate( DAY(dInicial)+1, MONTH(dInicial), YEAR(dInicial) )
le sumo 1 día más pa que no regrese y que es una de las soluciones posteadas en este foro, tambien lo hace, en algunas ocaciones regresa hasta 2 días atras..
Alguien puede explicar porque con xharbour y fivewin falla y porque no con clipper y fivewin no..?
Maestraso Antonio Linares... Ahi le dejo esta carta al aire..
No creo sel el único con este problema....
FHW 2.6 + xHarbour 0.45 Flex
Resulta que uso la funcion SETDATE() para el cambio de fecha de Windows el cual lo uso así:
STATIC dInicial ---------->>Al inicio de la aplicacion lo he probado tambien como PUBLIC.
SET DATE TO BRITISH ---------->>Dentro de la Funcion Main
SET CENTURY ON
SET EPOCH TO 2000
dInicial:= Date()
Dentro del sistema cambio la fecha de windows con la misma funcion esto lo hago para revisar la informacion de meses pasados, ya que mi sistema usa una carpeta de informacion por mes de trabajo... aki funciona bien y sin problemas con esta funcion..
FUNCTION CambiaFecha()
LOCAL dVar1:= DATE()
LOCAL oDlg,oGet,oBtn1,oBtn2
LOCAL lSal:= .F.
DEFINE DIALOG oDlg RESOURCE "SELFECHA" TITLE "Cambiar Fecha de Trabajo" OF oWndMain
REDEFINE BTNGET oGet VAR dVar1 ID 102 OF oDlg RESOURCE "B_CALE" SPINNER;
ON UP (++dVar1,oGet:REFRESH()) ON DOWN (--dVar1,oGet:REFRESH());
ACTION (aRect := GetCoors(oGet:hWnd),;
dVar1 := FwCalendar(dVar1,aRect[1],aRect[4],oDlg),;
oGet:REFRESH())
REDEFINE BUTTON oBtn1 ID 107 OF oDlg ACTION (SetDate( DAY( dVar1 ), MONTH( dVar1 ), YEAR( dVar1 ) ), SYSREFRESH(), CambMes(dVar1), CreArchi(), Indexa(), lSal:= .T., oDlg:END())
REDEFINE BUTTON oBtn2 ID 108 OF oDlg ACTION (lSal:= .T., oDlg:END()) CANCEL
ACTIVATE DIALOG oDlg CENTERED VALID (lSal)
Return nil
Hasta aki todo bien..
SetDate( DAY(dInicial), MONTH(dInicial), YEAR(dInicial) ) ---------->> Esto lo hago al salir la aplicacion por si el usuario se olvida de regresar la fecha de windows a la fecha inicial, la cual la tome al principio.
Por una extraña razon al momento de hacer el cambio de fecha la atrasa un dia, y lo hace por cada vez que salgo del programa entre las 9 y 11 de la noche, y en horarios diferentes durante el día, cosa que no pasaba con 16bits, ya revise el código fuente de esta funcion y son exactamente iguales, si hago esto:
SetDate( DAY(dInicial)+1, MONTH(dInicial), YEAR(dInicial) )
le sumo 1 día más pa que no regrese y que es una de las soluciones posteadas en este foro, tambien lo hace, en algunas ocaciones regresa hasta 2 días atras..
Alguien puede explicar porque con xharbour y fivewin falla y porque no con clipper y fivewin no..?
Maestraso Antonio Linares... Ahi le dejo esta carta al aire..
No creo sel el único con este problema....
FHW 2.6 + xHarbour 0.45 Flex