Bug en la Funcion SetDate() 32bits

Post Reply
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Bug en la Funcion SetDate() 32bits

Post by cuatecatl82 »

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
Wanderson
Posts: 332
Joined: Thu Nov 17, 2005 9:11 pm

Re: Bug en la Funcion SetDate() 32bits

Post by Wanderson »

cuatecatl82 wrote: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
A mi me da lo mesmo bug,
Solução: no uso mas SetDate()

:(

Salud2
sildata
Posts: 38
Joined: Thu May 11, 2006 7:41 pm

Saludos

Post by sildata »

Amigo y colega, tomalo como una simple sugerencia, trata en lo posible de independizar los manejos de las fechas, es decir maneja dentro de tu sistema tu propia fecha que sea independiente de la del WINDOWS, con alguna variable PUBLIC, o cualquier otro medio, tienes mucha mas libertad y muchos menos peligros; anteriormente yo lo hacia como tu a travez de la fecha de la computadora y en alguna ocacion se le olvido al operador REPONER la fecha original y recien nos vinimos a dar cuenta al fin de mes, como te podras imaginar; el arroz con mango que se armo en la facturacion era de padre y señor mio. Ademas hay algunos programas como por ejemplo los antivirus que monitorean _ de fecha de la computadora y como respuesta te salen algunos mensajes y pueden llegar ha colgarte la maquina.
Espero haberte ayudado.
Rodolfo Silva
sildata@cantv
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Post by cuatecatl82 »

Estimado Rodolfo Silva:

:) Agradesco tu humilde opinión y coincido contigo, ya decidi dejar esa función SETDATE() para el cambio de fecha, ya que no hay una solución para este :twisted: ENORME BUG :evil: , creo que como nosotros muchos han pasado por este pequeñisimo inconveniente y han tenido que elegir otras opciones puesto que no nos dan una solución eficaz o en su defecto una corrección o codigo fuente que funcione, te comento que ya trabajo sobre esto y espero en estos días poder corregirlo, :idea: tengo pensado escribir algo de codigo para crea una nueva función para todos aquellos que necesitamos esta valiosa función :P .

En cuento lo tenga la subo al foro para todos los que la necesiten.

Saludos desde Chiapas, México
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

Yo tenia el mismo problema y lo solucioné con la librería funcky:

Code: Select all

oFuncky := TOleAuto():New("funcky")
oDate := oFuncky:CreateDate()

oDate:Set("mm/dd/aa") // siempre en formato mm/dd/aa
y listo, la función devuelve .t. si la fecha del sistema se cambió con éxito, .f. si hubo algún problema
Saludos
R.F.
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Post by cuatecatl82 »

Saludos RF:

Gracias por aportar ideas a la causa, pero tengo dudas sobre la libreria funcky..

1.- Es una libreria de terceros pagada..?

2.- En donde puedo adquirirla..?

He buscao en la red pero no la encuentro..

Abrazos..
User avatar
sysctrl2
Posts: 833
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Post by sysctrl2 »

es de pago,

aqui hay informacion,

http://www.abox.com/productos.asp?pid=295


saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Post by cuatecatl82 »

Gracias por su respuesta:

He Revisado la pagina y no es nada barata la lib. ( :x Aprox. $4000.00 Mex.),
creo que seguiré con mi proyecto de escribir alguna función para toda la comunidad que la necesite..

Saludos..
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

Efectivamente, no es barata, pero las mas de 2,000 funciones que tiene y que hacen practicamente de todo (correo con autenticacion, FTP, scaneo de red, operaciones con bits, etc etc etc) ademas se pueden usar no solo con Fivewin sino con xHarbour en modo consola o bien con cual otra GUI.
Saludos
R.F.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

FWH usa la función SetSystemTime() del API de Win32 desde la función SetDate(). Esta es la documentación de SetSystemTime():

The SetSystemTime function sets the current system time and date. The system time is expressed in Coordinated Universal Time (UTC).

BOOL SetSystemTime(

CONST SYSTEMTIME *lpSystemTime // address of system time to set
);

Parameters
lpSystemTime

Points to a SYSTEMTIME structure that contains the current system date and time.
The wDayOfWeek member of the SYSTEMTIME structure is ignored.

Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError
.

Remarks
Windows NT: The SetSystemTime function fails if the calling process does not have the SE_SYSTEMTIME_NAME privilege. This privilege is disabled by default. Use the AdjustTokenPrivileges function to enable this privilege and again to disable it after the time has been set. For more information about security privileges, see Privileges.
Windows 95: Security privileges are not supported or required.

See Also
AdjustTokenPrivileges, GetSystemTime, SetSystemTimeAdjustment, SYSTEMTIME, SystemTimeToTzSpecificLocalTime
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply