Здравствуйте все!
Подскажите пожалуйста каков алгоритм работы с переменными типа "дата+время", "время", "дата".
По какому принципу вычитают\прибавляют к TDateTime: год, месяц, день, час, минуту, секунду?
Заранее спасибо!
Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Работа с датой и временем.
-
- Posts: 2
- Joined: 08.03.2012 10:43
Re: Работа с датой и временем.
DateUtils с дельфей.
http://www.stealth.od.ua/download/DateUtils.pas
смотри функции типа IncYear, IncDay, IncMnute и т.д.
http://www.stealth.od.ua/download/DateUtils.pas
смотри функции типа IncYear, IncDay, IncMnute и т.д.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
-
- Posts: 2
- Joined: 08.03.2012 10:43
Re: Работа с датой и временем.
Да нет же. По операторам и т.д. почти понятно всё, но интересует прежде всего, например, почему конструкция:
var a,b:TDateTime;
begin
a:=now;
b:=a - (1/(24*60)); //или даже b:=now - (1/(24*60));
AddToSystemJournal('a='+DateTimeToStr(a)+ '*** '+'b='+DateTimeToStr(a));
end.
Результат:
22:31:59:187: Compiled succesfully
22:31:59:203: a=08.03.2012 22:31:59*** b=08.03.2012 22:31:59
22:31:59:218: Succesfully executed
...почему такое не работает, хотя должно отнять от даты минуту, но при проверке результата, значения в Стелсе не изменяются... В скудных тех.писах. Паскаль Скрипта объяснения не нашел... Есть подозрения, что перегружается просто переменная по величине, но тем не менее, даже распечаткой циклом значений сложения или вычитания, логики я там нифига не понял.
var a,b:TDateTime;
begin
a:=now;
b:=a - (1/(24*60)); //или даже b:=now - (1/(24*60));
AddToSystemJournal('a='+DateTimeToStr(a)+ '*** '+'b='+DateTimeToStr(a));
end.
Результат:
22:31:59:187: Compiled succesfully
22:31:59:203: a=08.03.2012 22:31:59*** b=08.03.2012 22:31:59
22:31:59:218: Succesfully executed
...почему такое не работает, хотя должно отнять от даты минуту, но при проверке результата, значения в Стелсе не изменяются... В скудных тех.писах. Паскаль Скрипта объяснения не нашел... Есть подозрения, что перегружается просто переменная по величине, но тем не менее, даже распечаткой циклом значений сложения или вычитания, логики я там нифига не понял.
Re: Работа с датой и временем.
1) - AddToSystemJournal('a='+DateTimeToStr(a)+ '*** '+'b='+DateTimeToStr(a));
два раза выводится переменная "a"
2) b:=a - (1/(24*60)); //или даже b:=now - (1/(24*60));
Эта ошибка уже не очевидна, но конструкция 1/x даст в результате 0, а чтобы получить дробное число надо делить не 1, а 1.0
Это будет работать как ожидается:
два раза выводится переменная "a"
2) b:=a - (1/(24*60)); //или даже b:=now - (1/(24*60));
Эта ошибка уже не очевидна, но конструкция 1/x даст в результате 0, а чтобы получить дробное число надо делить не 1, а 1.0
Это будет работать как ожидается:
Code: Select all
var a,b:TDateTime;
begin
a:=now;
b:= a - (1.0/(24*60)); //или даже b:=now - (1.0/(24*60));
AddToSystemJournal('a='+DateTimeToStr(a)+ '*** '+'b='+DateTimeToStr(b));
end.