Главная страница
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.045 c
8-1100782633
balcon
2004-11-18 15:57
2005.03.06
ширвание звука


6-1104171339
KarpUha
2004-12-27 21:15
2005.03.06
Ответ от модема


3-1107798131
Imbagame
2005-02-07 20:42
2005.03.06
ADO и изменение записей


1-1108844738
SOFS
2005-02-19 23:25
2005.03.06
Подскажите ламеру:можно работать програмно с Сдром,а как допустим


1-1108563308
Timofey
2005-02-16 17:15
2005.03.06
Просмотр страниц в TWebBrowser