Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.05.2010, 17:17
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Восклицание NOW + Миллисекунды

Приветствую, встала задача прибавления к текущей дате произвольного числа (миллисекунд), так вот вопрос в том как это сделать ?

Так как читал что с датами можно работать как с обычными числами, то пробывал сделать так:

Код:
ShowMessage(DateTimeToStr(now + (1000 * 60 * 5)));//те к текущей дате я прибавил 5 минут

Но результат неверен, ессно опыта таких манипуляций с датами нет
Ответить с цитированием
  #2  
Старый 21.05.2010, 18:58
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну да, т.к. время хранится справа от точки. Т.е. прибавление 5 минут будет так:

Код:
NewTime := Now + 5 / (24 * 60 * 60);
Ответить с цитированием
  #3  
Старый 21.05.2010, 19:23
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка

Цитата:
Сообщение от lmikle
Ну да, т.к. время хранится справа от точки. Т.е. прибавление 5 минут будет так:

Код:
NewTime := Now + 5 / (24 * 60 * 60);

Спасибо большое, учту
Ответить с цитированием
  #4  
Старый 21.05.2010, 20:46
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка

Еще уточню, а если мне надо прибавить 2 часа, то это будет выглядеть так?

Код:
now + 120 / (24 * 60 * 60);
Ответить с цитированием
  #5  
Старый 21.05.2010, 22:12
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Нверное. Но проще просто так:

Код:
NewDate := Now + 2 / 24;
Ответить с цитированием
  #6  
Старый 21.05.2010, 22:38
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Или
Код:
NewDate := Now + 1 / 12;
Сокращать дроби никто не запрещал. Хотя, все варианты рабочие.
P.S. Пофлужу по темам, хочу счётчик 777)))
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #7  
Старый 21.05.2010, 23:21
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка

Значения все таки получаются разные:

Код:
now + 120 / (24 * 60 * 60);now + 2 / 24

Так что же все таки правильно? Мне нужно универсальную функцию, которая позволяет прибавлять к текущей дате как время, так и часы, что то в этом духе:

Код:
function TForm1.NextWorkTime: TDateTime; 
begin
  Result := 0;
  case ComboBox1.ItemIndex of
    0:
      Result := now + 10 / (24 * 60 * 60);
    1:
      Result := now + 15 / (24 * 60 * 60);
    2:
      Result := now + 30 / (24 * 60 * 60);
    3:
      Result := now + 60 / (24 * 60 * 60);
    4:
      Result := now + 120 / (24 * 60 * 60);
    5:
      Result := now + 180 / (24 * 60 * 60);
  end;
end;
Ответить с цитированием
  #8  
Старый 22.05.2010, 01:33
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Код:
var
  hh, mm, ss, msec: word;
begin
  hh := 2; // 2 часа
  mm := 30; // 30 минут
  ss := 0; // 0 секунд
  msec := 0; // 0 миллисекунд
  Result := now + EncodeTime(hh, mm, ss, msec);
end;
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 22.05.2010 в 16:40.
Ответить с цитированием
  #9  
Старый 22.05.2010, 13:06
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка

О, точно, совсем забыл про эту функцию, тогда все манипуляции с временем будут выглядеть так?

Код:
function PrepareTime(hh: word; mm: word; ss: word = 0; msec: word = 0): String;
begin
  Result := DateTimeToStr(now + EncodeTime(hh, mm, ss, msec));
end;

function TForm1.NextWorkTime: String;
begin
  Result := '';
  case ComboBox1.ItemIndex of
    0:
      Result := PrepareTime(0, 10); // 10 минут
    1:
      Result := PrepareTime(0, 15); // 15 минут
    2:
      Result := PrepareTime(0, 30); // 30 минут
    3:
      Result := PrepareTime(1, 0); // 1 час
    4:
      Result := PrepareTime(2, 0); // 2 часа
    5:
      Result := PrepareTime(3, 0); // 3 часа
  end;
end;

Последний раз редактировалось Vayrus, 22.05.2010 в 13:09.
Ответить с цитированием
  #10  
Старый 22.05.2010, 16:39
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Ну да, как-то так.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:09.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter