Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

Формат даты и времени   Найти похожие ветки 

 
Ji ©   (2005-02-17 18:31) [0]

Встретил в описании вот такую строку (описываютя типы данных):
datetime = double (1.0 = 1 day = 24h, delphi format)
Что имеется ввиду?

В делфи для работы с датой и временем есть формат TDateTime. Что из себя представляет переменная типа TDateTime? И можно ли с датой и временем работать с помощью Double? (насколько я вкурсе double - это 4 байта)


 
Antonn ©   (2005-02-17 18:34) [1]


> Tdatetime = double


 
Чапаев ©   (2005-02-17 18:39) [2]

SizeOf(Double)=8


 
begin...end ©   (2005-02-17 18:50) [3]

> Ji ©   (17.02.05 18:31)

> Что из себя представляет переменная типа TDateTime?

Она представляет собой вещественное число, целая часть у которого равна количеству суток, прошедших с 30 декабря 1899 года, а дробная - части суток, прошедших с начала текущих суток.

> И можно ли с датой и временем работать с помощью
> Double?

Можно, только осторожно. Например, для определения количества дней, разделяющих две даты, можно просто отнять от одной переменной типа TDateTime другую:

var
 DaysCount: Double;
 DT1, DT2: TDateTime;
begin
 DaysCount := DT2 - DT1
end.


Над переменными типа TDateTime определены операторы сравнения (<, <=, =, >=, >):

var
 DT1, DT2: TDateTime;
begin
 if DT2 > DT1 then
   // Дата DT2 больше даты DT1
end.


Для того, чтобы определить, входит ли дата в заданный интервал дат, можно использовать функцию InRange из модуля Math. Обратите внимание, что эта функция (согласно её описанию) принимает параметры типа Double. Тем не менее, туда можно передать и параметры типа TDateTime:

uses
 Math;
var
 DT1, DT2, DT3: TDateTime;
begin
 if InRange(DT3, DT1, DT2) then
   // Дата DT3 входит в интервал между DT1 и DT2
end.


И всё же TDateTime не полностью эквивалентно Double. Например, если какая-нибудь подпрограмма требует параметр типа TDateTime, передаваемый по ссылке (var), то напрямую передать в неё переменную типа Double не удастся:

procedure MyProc(var Param: TDateTime);
begin
 ...
end;

var
 D: Double;
begin
 MyProc(D) <-- Ошибка!
end.


 
Fay ©   (2005-02-17 18:53) [4]

>> Она представляет собой вещественное число, целая часть у которого равна количеству суток, прошедших с 30 декабря 1899 года,
>> а дробная - части суток, прошедших с начала текущих суток.
Целая, дробная - фигня 8) Это просто количество суток.


 
begin...end ©   (2005-02-17 18:57) [5]

> Fay ©   (17.02.05 18:53) [4]

Абсолютно согласен. Просто я решил не импровизировать и перевести справку Delphi.
:-)


 
Ji ©   (2005-02-17 22:24) [6]

Спасибо всем! Помогли разобраться...


 
Johnmen ©   (2005-02-17 23:07) [7]

>begin...end ©  (17.02.05 18:50) [3]
>то напрямую передать в неё переменную типа Double не удастся:

Не совсем понятно, что значит "напрямую", но вот так совершенно корректно

MyProc(TDateTime(D));


 
Anatoly Podgoretsky ©   (2005-02-17 23:48) [8]

Fay ©   (17.02.05 18:53) [4]
Правильно 1ю5 суток


 
begin...end ©   (2005-02-18 07:41) [9]

> Johnmen ©   (17.02.05 23:07) [7]

"Напрямую" - это значит просто взять и передать параметр, без всяких лишних телодвижений.

Я хотел подчеркнуть, что TDateTime и Double - это разные типы, поскольку TDateTime объявлен так:

type
 TDateTime = type Double

а не так:

type
 TDateTime = Double



Страницы: 1 вся ветка

Текущий архив: 2005.03.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
3-1106922398
LEONardo
2005-01-28 17:26
2005.03.06
Изменять данные после SQL запроса


14-1108675948
Гость
2005-02-18 00:32
2005.03.06
Возможно ли одновременно подключить


1-1108523985
Wowa-K
2005-02-16 06:19
2005.03.06
Быстрая вставка данных в Word


11-1092678190
help
2004-08-16 21:43
2005.03.06
Трэй и иконка


14-1108047454
Новенький
2005-02-10 17:57
2005.03.06
Помогите с установкой ХР