Page 2 of 2

Re: bug en SetFTime, no cambia la HORA

PostPosted: Tue Jun 25, 2013 6:34 pm
by Antonio Linares
ERROR_INVALID_HANDLE
6 (0x6)
The handle is invalid.


http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

Ya tenemos una pieza más para completar el puzzle :-)

Re: bug en SetFTime, no cambia la HORA

PostPosted: Tue Jun 25, 2013 6:46 pm
by Antonio Linares
Me faltaba crear fecha.prg :oops:

Pero ahora GetLastError() devuelve 228 y ese valor no está documentado :-(
http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

Re: bug en SetFTime, no cambia la HORA

PostPosted: Tue Jun 25, 2013 6:52 pm
by Antonio Linares
Lo anterior no cuenta, era un error mio en las pruebas. Hoy llevo demasiadas horas de ordenador :-)

SetFTime() me devuelve .T. lo que quiere decir que Windows dice que todo ha ido bien, pero... las horas son distintas.

3:14:20 antes

5:14:20 despues

Asi que como se ha comentado, esta bien salvo la diferencia horaria. En mi opinión, o es un bug de Windows, o tenemos que indicarle previamente la diferencia horaria de alguna forma.

Re: bug en SetFTime, no cambia la HORA

PostPosted: Tue Jun 25, 2013 6:56 pm
by Antonio Linares
En la documentación de la función SetFileTime() de Windows se comenta esto:

the GetFileTime function may not return the same file time information set using SetFileTime

Remarks
Not all file systems can record creation and last access times and not all file systems record them in the same manner. For example, on FAT, create time has a resolution of 10 milliseconds, write time has a resolution of 2 seconds, and access time has a resolution of 1 day (really, the access date). Therefore, the GetFileTime function may not return the same file time information set using SetFileTime. NTFS delays updates to the last access time for a file by up to one hour after the last access.


http://msdn.microsoft.com/en-us/library/windows/desktop/ms724933(v=vs.85).aspx

Además proporcionan un ejemplo, desde esa misma página, que voy a revisar ahora

Re: bug en SetFTime, no cambia la HORA

PostPosted: Tue Jun 25, 2013 7:00 pm
by Antonio Linares
El ejemplo de ellos no tiene nada de particular, usa la función de la misma forma que lo hace FWH:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724205(v=vs.85).aspx

Luego es un comportamiento propio de Windows.

Misterio resuelto :-D

Re: bug en SetFTime, no cambia la HORA

PostPosted: Wed Jun 26, 2013 2:00 pm
by rolando
Buen día,

Otra vuelta de tuerca.

Para mi caso, y que la hora que le coloco sea la real, cree una función a la que le paso los datos por referencia:
Code: Select all  Expand view
UTCtoARG(@dDate,@cTime)

y los cambia a UTC+3 (horario de Argentina) y es la siguiente:

Code: Select all  Expand view
//---------------------------------------------------------------------------------------------------------------

Function UTCtoARG(dDate,cTime)   // le sumo 3 horas para que una función que la convierte en utc
                                   // me deje la hora tal cual la necesito. o sea, retorna la
                                 // hora que llega pero con 3 horas sumadas y obviamente le suma un día
                                 // si esto es necesario

local nHora:=val(substr(cTime,1,2))+3, cHora:=substr(cTime,1,2)

//msginfo("Entra "+dtoc(dDate)+"---"+ctime)


if nHora>24     // si se da esta condición, la date hay que aumentarle un día
        nHora:=nHora-24
            if len( cHora:=alltrim(str(nHora)) ) == 1  // para agregarle un cero adelante cuando es la una,
                                                                       // las dos, etc
            cHora:="0"+cHora
            endif
        cTime:=cHora+substr(cTime,3,6) 
        dDate:=dDate+1
    else
       
        if len( cHora:=alltrim(str(nHora)) ) == 1  // para agregarle un cero adelante cuando es la una,
                                                                    //las dos, etc
            cHora:="0"+cHora
        endif
        cTime:=cHora+substr(cTime,3,6)
endif

//msginfo("Sale "+dtoc(dDate)+"---"+ctime)

Return nil

//---------------------------------------------------------------------------------------------------------------



Con esto reformo la fecha y hora al horario "real" de Argentina (UTC +3) pero se adapta a cualquier país con solo cambiarle el nro a sumar (o restar).

Como dice un amigo, "A mi me gusta vivir en Argentina, porque cuando son las doce, son las doce y no las 15 o las 9 como en otros países". Je je.

Rolando :D