Что нового

Конвертировать FILETIME в дату

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
Функция _WinAPI_GetFileInformationByHandleEx использует структуру $tagFILEINFO
Подскажите как получить дату. В массиве от 1 до 4 возвращаются числа. Как сконвертировать их в обычную дату вида YYYY/MM/DD HH:MM:SS?..

Код:
; $tagFILEINFO = 'uint64 CreationTime;uint64 LastAccessTime;uint64 LastWriteTime;uint64 ChangeTime;dword Attributes;'
#include <WinAPIFiles.au3>
#include <Array.au3>
 
Local $aInfo[6]
Local $hFile = _WinAPI_CreateFile(@AutoItExe, 2, 0, 6)
Local $tFI = _WinAPI_GetFileInformationByHandleEx($hFile)
$aInfo[1]=DllStructGetData($tFI,1)
$aInfo[2]=DllStructGetData($tFI,2)
$aInfo[3]=DllStructGetData($tFI,3)
$aInfo[4]=DllStructGetData($tFI,4)
$aInfo[5]=DllStructGetData($tFI,5)
_WinAPI_CloseHandle($hFile)
 
_ArrayDisplay($aInfo)


Из числа 131870541631059319 надо получить дату 2018/11/18 22:36:3
UTC File Change Time (YYYY-MM-DD HH:MM:SS): 2018/11/18 22:36:3
Local File Change Time(YYYY-MM-DD HH:MM:SS): 2018/11/19 1:36:3
 
Автор
A

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
InnI [?]

Функция _Date_Time_FileTimeToStr возвращает одну дату, а мне нужна некая функция _Convert , чтобы получить 4 разные даты для файла

Код:
$aInfo[1]=_Convert(DllStructGetData($tFI,1))
$aInfo[2]=_Convert(DllStructGetData($tFI,2))
$aInfo[3]=_Convert(DllStructGetData($tFI,3))
$aInfo[4]=_Convert(DllStructGetData($tFI,4))
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,445
Andrey_A [?]
получить 4 разные даты
Код:
For $i = 1 To 4
  $tFileTime = DllStructCreate("uint64")
  DllStructSetData($tFileTime, 1, $aInfo[$i])
  ConsoleWrite("UTC " & _Date_Time_FileTimeToStr($tFileTime, 1) & "   ")
  $tFileTime = _Date_Time_FileTimeToLocalFileTime($tFileTime)
  ConsoleWrite("Local " & _Date_Time_FileTimeToStr($tFileTime, 1) & @CRLF)
Next
 
Верх