Последние записи
- Получение ProductKey установленной Windows
- Как парсить https сайт ?
- Смена регистра строки текста на BAT (CMD)
- Вывод разноцветного текста на BAT (CMD)
- Узнать дату окончания сертификата
- Как создать полноценный сайт на Open Server
- Получить температуру процессора на bat-файлах
- Динамические массивы в Lazarus / Delphi — индексация элементов
- Многозадачность на бат-файлах
- Дата и время изменения файла
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
13th
Ноя
Дата и время изменения файла
Posted by obzor under Delphi
Мне нужно в ячейку StringGrid поместить дату и время изменения файла
Делаю это так:
function ReadDate(FN:String):String
var
W: WideString; // полное имя файла
Dat:TDateTime;
FHandle: Integer;
begin
W:=FN;
FHandle := FileOpen(w, 0);
Dat:= FileDateToDateTime(FileGetDate(FHandle));
Result:= FormatDateTime('yyyy.mm.dd.hh.nn.ss', Dat);
end;
Однако, полученное время отличается от видимого в свойствах файла (в проводнике)
Например:
получено 2008.08.26.19.42.02
в свойствах 26.08.2008 20:42
То есть, ровно на час (если файл был изменен за час до нового года, то на год)
Что интересно, если дату изменения вернуть назад функцией FileSetDate,
то дата в свойствах файла становится на час моложе (прибавляется час)
Сам вопрос:
Можно ли не особенно исхитряясь получить дату съемки полностью соответствующую таковой в свойствах файла.
Если нельзя, то как выяснить (программно) региональные настройки Windows и как их использовать для коррекции полученной даты (нужно их как-то преобразовать, а затем сложить или вычесть…)
Я в этом коде не вижу проблем. Разве что вместо FileGetDate( FileOpen() ) лучше один вызов
FileAge(). Вместо FormatDateTime() наверное лучше DateTimeToString() или DateTimeToStr
http://www.delphibasics.ru/DateTimeToString.php
В NTFS время файлов хранится в UTC, а дельфийские функции из SysUtils вроде DateTimeToString выдают локальное время (то есть автоматически преобразуют UTC-время
в локальное время) . В принципе, это то что нужно.
А узнать локальный часовой пояс — это можно через Windows API. Есть вызовы GetLocalTime (текущее локальное время) и GetSystemTime (текущее время в UTC). Другие функции в Windows API есть, много по этой теме.
В таблице видно, что разница не точно час, еще и секунды отличаются. Может быть, перенос между разными файловыми системами и конвертация timestamp дают такой результат. Попробуйте сделать копию проблемного файла и изменить дату с помощью FileSetDate — будет ли у копии проявляться смещение времени, как у оригинала? Насчет даты в самом файле, она, по идее, хранится в метаданных в формате exif — можете поискать компоненты для работы с ним. Можете попробовать код отсюда:
procedure TMyForm.ReportFileTimes(const FileName: string);
procedure ReportTime(const Name: string; const FileTime: TFileTime);
var
SystemTime, LocalTime: TSystemTime;
begin
if not FileTimeToSystemTime(FileTime, SystemTime) then
RaiseLastOSError;
if not SystemTimeToTzSpecificLocalTime(nil, SystemTime, LocalTime) then
RaiseLastOSError;
Memo1.Lines.Add(Name + ': ' + DateTimeToStr(SystemTimeToDateTime(LocalTime)));
end;
var
fad: TWin32FileAttributeData;
begin
if not GetFileAttributesEx(PChar(FileName), GetFileExInfoStandard, @fad) then
RaiseLastOSError;
Memo1.Clear;
Memo1.Lines.Add(FileName);
ReportTime('Created', fad.ftCreationTime);
ReportTime('Modified', fad.ftLastWriteTime);
ReportTime('Accessed', fad.ftLastAccessTime);
end;
procedure TMyForm.Button1Click(Sender: TObject);
begin
ReportFileTimes(Edit1.Text);
end;
Покажет ли он правильное время?
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту

пеллетные котлы

Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)


