Bug en la Funcion SetDate() 32bits
- 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
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
Re: Bug en la Funcion SetDate() 32bits
A mi me da lo mesmo bug,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
Solução: no uso mas SetDate()
Salud2
Saludos
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
Espero haberte ayudado.
Rodolfo Silva
sildata@cantv
- cuatecatl82
- Posts: 614
- Joined: Wed Mar 14, 2007 6:49 pm
- Location: San Cristobal de las Casas, Chiapas México
- Contact:
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 ENORME BUG , 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, tengo pensado escribir algo de codigo para crea una nueva función para todos aquellos que necesitamos esta valiosa función .
En cuento lo tenga la subo al foro para todos los que la necesiten.
Saludos desde Chiapas, México
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 ENORME BUG , 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, tengo pensado escribir algo de codigo para crea una nueva función para todos aquellos que necesitamos esta valiosa función .
En cuento lo tenga la subo al foro para todos los que la necesiten.
Saludos desde Chiapas, México
Yo tenia el mismo problema y lo solucioné con la librería funcky:
y listo, la función devuelve .t. si la fecha del sistema se cambió con éxito, .f. si hubo algún problema
Code: Select all
oFuncky := TOleAuto():New("funcky")
oDate := oFuncky:CreateDate()
oDate:Set("mm/dd/aa") // siempre en formato mm/dd/aa
Saludos
R.F.
R.F.
- cuatecatl82
- Posts: 614
- Joined: Wed Mar 14, 2007 6:49 pm
- Location: San Cristobal de las Casas, Chiapas México
- Contact:
- cuatecatl82
- Posts: 614
- Joined: Wed Mar 14, 2007 6:49 pm
- Location: San Cristobal de las Casas, Chiapas México
- Contact:
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.
R.F.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
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
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