bug en SetFTime, no cambia la HORA

Re: bug en SetFTime, no cambia la HORA

Postby Antonio Linares » Tue Jun 25, 2013 6:34 pm

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 :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41476
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: bug en SetFTime, no cambia la HORA

Postby Antonio Linares » Tue Jun 25, 2013 6:46 pm

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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41476
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: bug en SetFTime, no cambia la HORA

Postby Antonio Linares » Tue Jun 25, 2013 6:52 pm

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.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41476
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: bug en SetFTime, no cambia la HORA

Postby Antonio Linares » Tue Jun 25, 2013 6:56 pm

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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41476
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: bug en SetFTime, no cambia la HORA

Postby Antonio Linares » Tue Jun 25, 2013 7:00 pm

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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41476
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: bug en SetFTime, no cambia la HORA

Postby rolando » Wed Jun 26, 2013 2:00 pm

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
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 51 guests