Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разница между двумя датами TFileTime? как правильно работать с TFileTime 
V
    Опции темы
Clio
Дата 28.9.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 6.11.2007

Репутация: нет
Всего: нет



Добрый день!
У меня есть 2 даты date1 и date2 типа TFileTime , date2>date1 .
Подскажите как правильно вычесть из date2  date1.
И результат перевести в формат <дни,часы,минуты,секунды> .

PM MAIL   Вверх
Snowy
Дата 28.9.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Код

var
  st: TSystemTime;
  date1, date2, rt: TFileTime;
begin
  rt.dwHighDateTime := date2.dwHighDateTime - date1.dwHighDateTime;
  rt.dwLowDateTime := date2.dwLowDateTime - date1.dwLowDateTime;
  FileTimeToSystemTime(rt, st);
end;

PM MAIL   Вверх
Clio
Дата 28.9.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 6.11.2007

Репутация: нет
Всего: нет



Спасибо за помощь!


Только результат выдаеться на 1 день больше.
Вот пример :

Код

date1:  28/9/2009 13:54:11
date2: 28/9/2009 13:55:01
// преобразовали из SystemTime в FileTime
 date1.dwHighDateTime: 30031939 
 date1.dwLowDateTime: 1177493056 
 date2.dwHighDateTime:  30031939 
 date2.dwLowDateTime: 676243056 
// результат вычитания
rt.dwHighDateTime: 0 
rt.dwLowDateTime: 501250000 
// преобразовали результат в SystemTime
 1 d 0 h 0 m 50 s 


Как это можно побороть?
PM MAIL   Вверх
Snowy
Дата 28.9.2009, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Легко.
Просто нужно сдвинуть точку отсчёта:
Код

  rt.dwHighDateTime := date2.dwHighDateTime - date1.dwHighDateTime;
  rt.dwLowDateTime := date2.dwLowDateTime - date1.dwLowDateTime;
  FileTimeToSystemTime(rt, st);
  st.wYear := st.wYear - 1601;
  st.wMonth := st.wMonth - 1;
  st.wDay := st.wDay - 1;


Добавлено через 1 минуту и 52 секунды
Просто точкой отсчёта является 1 января 1601 года, которая и всплывает при конвертации нуля дней.
PM MAIL   Вверх
Clio
Дата 28.9.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 6.11.2007

Репутация: нет
Всего: нет




Большое спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0860 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.