Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.037 c
14-1108700994
begin...end
2005-02-18 07:29
2005.03.06
С Днём рождения! 18 февраля


1-1109156917
SAVage
2005-02-23 14:08
2005.03.06
Преобразование типов (record<->pointer)


1-1109150078
Object
2005-02-23 12:14
2005.03.06
Картинки в ListBox


14-1108147782
olookin
2005-02-11 21:49
2005.03.06
Линда - Беги... Ваше мнение?


8-1100429956
TSoftman
2004-11-14 13:59
2005.03.06
TImageEn - форматы tif и gif





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский