If anyone wants to use the FileTime of the Windows API, here are some functions and macros using Quad variables:
+ FileTime.Q = GetFileTime(path,stamp)
+ GetSystemTimeAsFileTime_(@Now.Q)
+ FileTimeToLocalFileTime_(@FileTime,@Local.Q)
+ PBdate = PBdateFromFileTime(ftQuad)
+ FileTime.Q = FileTimeFromPBdate(PBdate)
Code: Select all
; ---------------------------------------------------------------
; GetFileDate.pbi
;- File Time thru Dir Search, Conversions
; ---------------------------------------------------------------
; stamp_ = 0,1,2 or #PB_Date_Created, #PB_Date_Accessed, #PB_Date_Modified
; returns filetime as Quad (UTC)
Procedure.q GetFileTime(path_.s,stamp_)
searchData.WIN32_FIND_DATA
hFind = FindFirstFile_(path_,@searchData)
If hFind <> #INVALID_HANDLE_VALUE
*ft.quad = @searchData\ftCreationTime + stamp_ * SizeOf(filetime)
FindClose_(hFind)
ProcedureReturn *ft\q
Else
ProcedureReturn 0
EndIf
EndProcedure
; Now you can use the System Time "As FileTime" (UTC) to compare
; GetSystemTimeAsFileTime_(@Now.Q)
; Convert a given FileTime (UTC, Quad) to local:
; FileTimeToLocalFileTime_(@FileTime,@Local.Q)
; PureBasic Date Conversions ------------------------------------
#PBdateBase = $019db1ded53e8000 ; quad
#ftUnitsInSecond = 10000000 ; filetime units
Macro PBdateFromFileTime(ftQuad) ; assumes Quad, produces Long PBdate
(ftQuad - #PBdateBase) / #ftUnitsInSecond
EndMacro
Macro FileTimeFromPBdate(PBdate) ; assumes Long PBdate, produces Quad !!
(PBdate * #ftUnitsInSecond) + #PBdateBase
EndMacro
Code: Select all
; ------------------------------------------------------------
; test GetFileDate functions
; ------------------------------------------------------------
file.s = "GetFileDate.pbi" ; *** use any file to test ***
stamp = #PB_Date_Created ; or #PB_Date_Accessed, #PB_Date_Modified
IncludeFile "GetFileDate.pbi"
Procedure DebugStamp(pbdate,text.s)
Debug FormatDate("%yyyy-%mm-%dd, %hh:%ii:%ss",PBdate) + " " + text
EndProcedure
DebugStamp(GetFileDate(file,stamp),"PB FileDate, UTC")
filetime.Q = GetFileTime(file,stamp)
DebugStamp(PBdateFromFileTime(filetime),"API FileTime, UTC")
FileTimeToLocalFileTime_(@FileTime,@Local.Q)
DebugStamp(PBdateFromFileTime(Local),"API FileTime, Local")
GetSystemTimeAsFileTime_(@Now.Q)
DebugStamp(PBdateFromFileTime(Now),"API SystemTime, UTC")
FileTimeToLocalFileTime_(@Now,@Local.Q)
DebugStamp(PBdateFromFileTime(local),"API SystemTime, Local")
End