TDateTime — Тип Delphi


Как узнать переменную типа TDateTime, TDate и TTime в Delphi

Мне нужно знать переменную типа TDateTime, TDate и TTime.

Кто-нибудь знает, как это сделать?

Я использовал приведенный ниже код, результатом является «NOT TDateTime», «NOT TDate», «NOT Ttime»

Перегружены операционные перегрузки Implicit оператора TValue .

Когда вы назначаете результат StrToDateTime , StrToDate и StrToTime на TValue , он использует самую подходящую перегрузку оператора Implicit от TValue , которая равна Extended .

Также имейте в виду, что все три функции возвращают TDateTime , поэтому даже если бы были перегрузки операторов для TDateTime , TDate и TTime , это не сработало бы, как ожидалось.

Чтобы получить правильные результаты, вам нужно будет явно указать тип при назначении ваших значений переменным TValue :

На всякий случай вы пытались определить тип результата StrToDateTime:

В качестве альтернативы вы можете использовать функции TryStrToDate , TryStrToTime и TryStrToDateTime .

Если вам интересно, TDateTime кодируется как плавающая точка Double внутри.

Внутренние TDateTime
Дробная часть обозначает время, целое число обозначает дату.
Зная это, следующие тесты будут оцениваться до true .

Очевидно, что очень обходной способ тестирования, но иногда он помогает узнать, как TDateTime формируется внутри.

DateUtils
Разумными версиями этих тестов были бы:

Тип TSQLTimeStamp

Читайте также:

  1. План заняття
  2. Функции и процедуры Delphi для работы с датой и временем

Описание

Тип TTimeStamp.

Описание

Тип TDateTime.

TDateTime представляет значение даты и времени в языке Delphi.

Модуль
System

Синтаксис Delphi:

type TDateTime = type Double;

Тип TDateTime — это основной тип в Delphi для работы с датой и временем. Он является числом с плавающей запятой, целая часть которого содержит число дней, отсчитанное от некоторого начала календаря, а дробная часть равна части 24-часового дня, т.е. характеризует время и не относится к дате. Для 32-разрядных версий Delphi за начало календаря принята дата 12/30/1899, 12 часов.

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

12/30/1899 12:00 am
2.75 1/1/1900 6:00 pm
-1.25 12/29/1899 6:00 am
1/1/1996 12:00 am

Чтобы найти количество дней, включая дробную часть, между двумя датами, просто вычтите два значения, если только одно из них не является отрицательным. Аналогично, если значение TDateTime не отрицательное, то, чтобы увеличить значение даты и времени на определенное кличество дней, включая дробную часть, достаточно прибавить количество дней, включая дробную часть, к значению TDateTime.

Когда обрабатываются отрицательные значения TDateTimes, то вычисление дробной части производится отдельно. Дробная часть отражает часть 24-часового дня не зависимо от знака значения TDateTime. Например, 6:00 am on 12/29/1899 это –1.25, а неt –1 + 0.25, что составило бы –0.75. Значений TDateTime между –1 и 0 не существует.

Cовет: В модулях SysUtils и DateUtils для работы с датой и временем имеется большое количество процедур и функций на все случаи жизни. Не заморачивайтесь с обственными вычислениями, не изобретайте велосипед, а пользуйтесь уже готовыми наработками разработчиков Delphi. (См. Функции и процедуры Delphi для работы с датой и временем.) Оно надежнее.

Примечание: В Delphi 1 за начало отсчета принят год 1, т.е. для перевода даты Delphi 1 в дату последующих версий Delphi надо вычесть из даты число 693594.

TTimeStamp представляет значения дата и время.

Модуль
SysUtils

Синтаксис Delphi:

type TTimeStamp = record Time: Integer; Date: Integer; end;

Используйте TTimeStamp если требуется повышеная точность представления значения времени в знчениях дата/время. Если нет необходимости сохранять значение времени с точностью до милисекунд, используйте более компактное TDateTime. Если необходима еще большая точность, то используйте TSQLTimeStamp (но НЕ назначайте его типом Variant).

Поле Time field показывает количество милисекунд, прошедших с полуночи.

Поле Data показывает число календарных дней от начала календаря (число дней с 1/1/0001 плюс один).

TSQLTimeStamp представляет значения даты и времени с очень высокой точностью.

Модуль
SqlTimSt

Синтаксис Delphi:

Дата добавления: 2014-12-25 ; Просмотров: 383 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Как правильно работать с датой и временем

26.06.2012, 10:59

Работа с Датой и Временем
Всем привет, помогите решить задачи с датой и временем, ни когда не с сталкивался еще с этим и не.

Илон Маск рекомендует:  Что такое код setmapmode

Работа с датой и временем
ребят. к примеру есть у меня переменная типа дата-время: str:=’12.03.2011 12:23:54′;.

Работа с датой и временем(калькулятор)
Задание: Организовать проект «Калькулятор времени». Вывести на экран текущую дату, а также время(в.

Работа с Датой и Временем. Delphi 7
Подскажите пожалуйста! В ячейке таблицы есть поле со временем длительности. В нем могут.

Сохранение файла с датой и временем в названии
Нужно сохранить текст из Memo1 в текстовый документ, имя которого будет дата и время сохранения .

26.06.2012, 14:05 2

Решение

26.06.2012, 15:51 [ТС] 3

то что вы предлагаете, это неудобно, там нужно складывать часы, дни, месяцы, учитывать сколько дней в месяце ,месяцев в году и тд. а в unixtime достаточно сложить два числа и все.Для тех кто в танке: unix time это кол-во секунд прошедших с 01.01.1970, в дельфе есть аналог, но там только кл-во дней прошедших с 1900 года.а мне нужны месяца, дни, часы,минуты, секунды

Нашел, вот ф-ия преобразующая unixtime и TDateTime в обе стороны

26.06.2012, 15:51

Сделать так, чтобы папка сохранялась с датой и временем в названии
Помогите! не могу понять как в Delphi7 сделать так чтоб папка создавалась с названием даты и время.

Как правильно работать с таблицами Word
Здравствуйте, помогите решить проблему. Строка после таблицы помещается в ее первую ячейку. Как.

Как работать в Perl с датой и временем?
как работать в Perl с датой и временем которые я получаю из MySql, например: как получить.

TDateTime to QDateTime

Итак необходимо преобразовать тип TDateTime, использующийся в Delphi, в тип QDateTime Qt.
TDateTime представляет собой число с плавающей точкой, где целая часть — число дней с 30 декабря 1899 года до текущего дня, а дробная часть — число секунд от начала дня.

QDateTime Converter::fromTDateTime( double tDateTime )
<
int time_t = (int)((tDateTime — 25569.16666) * 86400); //получили время в формате time_t
return QDateTime::fromTime_t( time_t );
>

25569.16666 — это 1 января 1970 года в формате TDateTime.
86400 — количество секунд в одном дне.

В реальной программе оба магических числа заменяем константами.

Обратное преобразование выполняется в обратном порядке.

Delphi: как определить и опорожнить значение TDatetime

Кажется, нет способа назначить NULL (или «неприсвоенным значением » to TDateTime переменные.


единственный способ, который я себе представлял, — это использовать что-то вроде этого:

есть ли кто-нибудь, кто знает лучшее решение, что не перекрывает значение даты 0?

отрицательные значения TDateTime опасно? (Как способный ресурс для предыдущей цели)

4 ответов

как Андреас уже писал, TDateTime тип на самом деле double и, следовательно, не «nullable». Я использую

для пустого значения даты, поскольку это представляет невозможную дату 00/00/0000 . Но, например, DevExpress использует

таким образом, кажется, нет согласованной стандартной долины, вы должны выбрать тот, который соответствует вашим потребностям.

сначала вам нужно определить, что вы подразумеваете под » пустым TDateTime значение’.

A TDateTime value-это double с датой, закодированной в целочисленной части, и временем, закодированным в дробной части. Таким образом, ближе всего к «нулевой дате» вы можете получить, вероятно, 0 .

следовательно, просто проверить ADate <> 0 чтобы проверить, является ли дата «null».

но будьте осторожны: если вы объявляете TDateTime локальная переменная тогда это не обязательно будет =0 прежде чем вы дадите его значение. Это может быть что угодно. Конечно, то же самое относится и к переменным типа integer , double , boolean , .

кроме того, я считаю, что a TDateTime со значением 0 кодирует дату 1899-12-30.

в конце концов, отрицательные TDateTime значения совершенно нормальны. Например, -5000 соответствует 1886-04-22 .

я не совсем понимаю смысл вашего кода. Если вы хотите использовать 0 как значение «неназначенный» (что плохо, если вы заинтересованы в даты близки к 1899-12-30), почему бы просто не

или, возможно (но не эквивалентно!),

в своем ответе Айн дал несколько более разумных вариантов для значения «неназначенная дата».

tDateTime не определено для значений между 0 и -1, что означает, что tDateTime -0.5 является неопределенным значением и полезно для нулевой даты в качестве альтернативы NaN. DateTimeToString отобразит -0.5 то же самое, что и +0.5;

используйте PDateTime вместо TDateTime и отправьте как нулевое значение. Если нет указателя на значение, результат не имеет значения.

для проверки значения используйте назначенный ptr:

TDateTime Type

Description

(Please provide a description in your own words. It is illegal to use the wording from the Delphi Help.)

Technical Comments

(Known issues / Documentation clarifications / Things to be aware of)

Examples

(Please provide links to articles/source code that show how to use this item.)

See Also

(Please provide links to items specifically related to this item.)

User Comments/Tips

(Please leave your name with your comment.)

Описание. Тип TDateTime — это основной тип в Delphi для работы с датой и временем

Тип TDateTime — это основной тип в Delphi для работы с датой и временем. Он является числом с плавающей запятой, целая часть которого содержит число дней, отсчитанное от некоторого начала календаря, а дробная часть равна части 24-часового дня, т.е. характеризует время и не относится к дате. Для 32-разрядных версий Delphi за начало календаря принята дата 12/30/1899, 12 часов.

Илон Маск рекомендует:  sizeof - Посчитать количество элементов массива или количество свойств объекта

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

12/30/1899 12:00 am
2.75 1/1/1900 6:00 pm
-1.25 12/29/1899 6:00 am
1/1/1996 12:00 am

Чтобы найти количество дней, включая дробную часть, между двумя датами, просто вычтите два значения, если только одно из них не является отрицательным. Аналогично, если значение TDateTime не отрицательное, то, чтобы увеличить значение даты и времени на определенное кличество дней, включая дробную часть, достаточно прибавить количество дней, включая дробную часть, к значению TDateTime.

Когда обрабатываются отрицательные значения TDateTimes, то вычисление дробной части производится отдельно. Дробная часть отражает часть 24-часового дня не зависимо от знака значения TDateTime. Например, 6:00 am on 12/29/1899 это –1.25, а неt –1 + 0.25, что составило бы –0.75. Значений TDateTime между –1 и 0 не существует.

Cовет: В модулях SysUtils и DateUtils для работы с датой и временем имеется большое количество процедур и функций на все случаи жизни. Не заморачивайтесь с обственными вычислениями, не изобретайте велосипед, а пользуйтесь уже готовыми наработками разработчиков Delphi. (См. Функции и процедуры Delphi для работы с датой и временем.) Оно надежнее.

Примечание: В Delphi 1 за начало отсчета принят год 1, т.е. для перевода даты Delphi 1 в дату последующих версий Delphi надо вычесть из даты число 693594.

Дата добавления: 2014-12-01 ; просмотров: 461 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ

How know type variable is TDateTime, TDate and TTime in Delphi

I need know type variable TDateTime, TDate and TTime.

Anyone have any idea how to do this?

I used the code below, the result is «Is NOT TDateTime», «Is NOT TDate», «Is NOT Ttime»

3 Answers 3

The Implicit operator overloads of TValue got you.

When you assign the result of StrToDateTime , StrToDate and StrToTime to a TValue it uses the most matching Implicit operator overload from TValue which is Extended .

Also keep in mind that all three functions return TDateTime so even if there were operator overloads for TDateTime , TDate and TTime it would not work as expected.

To get the correct results you would have to explicitly specify the type when assigning your values to the TValue variables:

Just in case you were trying to determine the result type of StrToDateTime:

Alternatively, you could use the TryStrToDate , TryStrToTime , and TryStrToDateTime functions.

In case you’re curious, the TDateTime is encoded as floating point Double internally.

TDateTime internals
The fractional part denotes the time, the integer part denotes the date.
Knowing this the following tests will evaluate to true .

Obviously that’s a very roundabout way of testing, but sometimes it helps to know how a TDateTime is shaped internally.

DateUtils
The sane versions of these tests would be:

TDateTime — Тип Delphi

Версия для печати

Конференция: Конференция iXBT.com (http://forum.ixbt.com/) Форум: Программирование (http://forum.ixbt.com/? > URL: http://forum.ixbt.com/topic.cgi? > Время GMT +03. Даты в формате dd.mm.yyyy.
775 , 07.05.2005 01:17
Есть две переменные е1 и е2 типа Ttime
Как при сложении е1+е2 и получать значения более 24 часов. Типа 35:56:45 ?

Может у кого есть готовый алгоритм?

1. FraGMenTaToR , 07.05.2005 02:55
775
trunc(e1+e2)*24 — это часы, которые нужно добавить к тому что ты смог получить
2. 775 , 07.05.2005 20:30
Честно говоря несколько не по теме. а если я буду склыдывать более 2 раз?
3. psg , 07.05.2005 22:05
775

цитата (Delphi Help): In Delphi, TDateTime is a type that maps to a Double.
.
The integral part of a Delphi TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of the TDateTime value is fraction of a 24 hour day that has elapsed.

TTime и TDate — это синонимы TDateTime, т.е. и дата, и время Delphi хранит как количество дней. Из этого и надо исходить при рассчетах.

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

4. 775 , 08.05.2005 21:45
ss1:=ss1+ss0;
if ss1>=60 then begin
ss1:=ss1-60;
inc(mm1);
end;

if mm1>=60 then begin
mm1:=mm1-60;
inc(hh1);
end;
mm1:=mm1+mm0;


if mm1>=60 then begin
mm1:=mm1-60;
inc(hh1);
end;

Справочник по компонентам Delphi. Часть 1
Страница 11. Функции работы с датами и временем

Функции работы с датами и временем

В Delphi для хранения дать! и (или) времени предусмотрен формат TDateTime, представляющий собой, на самом деле, обычное число с плавающей точкой.

При этом дата представляется целой частью числа, а время — дробной. Преимущество этого подхода в том, что теперь дать! и времена можно кор­ректно складывать и вычитать, например:

procedure TFormI.PormCreate(Sender: TObject);

Функции этой группы приведены в таблице:

function EncodeDate(Year, Month, Day: Word): TDateTime;

Преобразует дату, заданную раздельно годом, месяцем и днем, в формат TDateTime. Если они выходят за допустимые пределы, возникает ИС EConvertError.

procedure DecodeDatefDate: TDateTime; var Year, Month, Day: Word);

Преобразует дату в виде TDateTime к раздельным составляющим: году, месяцу и дню.

function EncodeTimefHour, Min, Sec, MSec: Word):

Преобразует значение времени, заданное часом, минутой, секундой и миллисекундой в формат TDateTime.

procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word) ;

Преобразует значение времени в формате TDateTime в раздельные составляющие: час, минуту, секунду и миллисекунду.

function DayOfWeektDate: TDateTime): Integer;

Возвращает номер текущего дня недели от 1 (воскресенье) до 7 (суббота).

Возвращает текущую дату.

Возвращает текущее время.

Возвращает текущие дату и время.

function DateToStr(Date: TDateTime): string;

Преобразует дату Date в текстовую строку.

function TimeToStr(Time: TDateTime): string;

Преобразует время из типа TDateTime в текстовую строку.

function DateTimeToStr(DateTime: TDateTime): string;

Преобразует дату и время из типа TDateTime в текстовую строку.

function StrToDatefconst S: string): TDateTime;

Преобразует текстовую строку в дату типа TDateTime. Строка должна содержать два или три числа, разделенных символом, содержащимся в DateSeparator. Формат даты в строке определяется в соответствии со значением переменной ShortDateFormat.

function StrToTime(const S: string): TDateTime;

Преобразует текстовую строку S в значение времени. Должен использоваться формат HH:NN:SS, где SS — может принимать значения ‘AM’ или ТМ’, иначе означает секунды. Если необходимо получать время в 24-х часовой шкале, то элемент SS формата опус­кается. Если преобразование невозможно, возникает ИС EConvertError.

StrToDateTime(const S: string): TDateTime;

Преобразует текстовую строку S в дату и время в формате MM/DD/YY HH:NN:SS (элемент SS см. выше).

function FormatDateTime(const Format: string; DateTime: TdateTime): string;

Преобразует дату и время из типа TDateTime в тек­стовую строку, используя формат, задаваемый параметром Format (см. примеч. 1).

procedure DateTimeToStringfvar Result: string; const Format: string; DateTime: TDateTime);

Преобразует дату и время типа TDateTime в строку Result, используя формат, передаваемый параметром Format (см. примеч. 1).

1. Правила задания спецификатора формата для даты и времени отлича­ются от рассмотренных выше. В первую очередь надо иметь в виду то, что функции вроде FormatDateTime оперируют над одним значением TDateTime, а спецификаторы формата извлекают из него те или иные составные части. При этом могут использоваться:

Отображает дату, используя формат ShortDateFormat, затем отобра­жается время в формате LongTimeFormat. Время не отображается, если дробная часть переменной DateTime нулевая.

Отображает число месяца без нуля в левом разряде (1-31).

Отображает число месяца с нулем в левом разряде (01-31).

Отображает день недели в соответствии с сокращенными именами из переменной ShortDayNames.

Отображает день недели в соответствии с полными именами из переменной LongDayNames.

Отображает дату в соответствии с форматом ShortDateFormat.

Отображает дату в соответствии с форматом LongDateFormat.

Отображает месяц как число без нуля в левом разряде (1-12).

Отображает месяц как число с нулем в левом разряде (01-12).

Отображает месяц в соответствии с сокращенными именами из переменной ShortMonthNames.

Отображает месяц в соответствии с полными именами из переменной Long MonthN am es.

Отображает год двумя цифрами.

Отображает год четырьмя цифрами.

Отображает час как число без нуля в левом разряде (0-23).

Отображает час как число с нулем в левом разряде (00-23).

Отображает минуты как число без нуля в левом разряде (0-59).

Отображает минуты как число с нулем в левом разряде (00-59).

Отображает секунды как число без нуля в левом разряде (0-59).

Отображает секунды как число с нулем в левом разряде (00-59).

Отображает время в соответствии с форматом ShortTimeFormat.

Отображает время в соответствии с форматом LongTimeFormat.

Отображает время в 12-часовой шкале. ‘AM’ означает часы до полудня, ‘РМ’ — часы после полудня.

Отображает время в 12-часовой шкале. При этом для времени до полудня отображается содержимое переменной TimeAMString, а после полудня — TimePMString.

Отображает время в 12-часовой шкале, ‘а’ означает часы до полудня, ‘р’ — часы после полудня.

Отображает символ — разделитель даты, содержащийся в переменной DataSeparator.

Отображает символ — разделитель времени, содержащийся в переменной TimeSeparator.

Символы, заключаемые в простые или двойные кавычки, отображаются как есть и не подвергаются форматированию.

Например, результатом вызова функции с параметрами

FormatDateTime (‘ «Совещание состоится в» dddd, dirrmim, yyyy, ‘ + ‘ «в» hh:nn’, StrToDateTime(’12/31/95 23:55′)) ;

будет строка ‘Совещание состоится в среду, 31 декабря 1995 в 23:55’ (естес­твенно, если вы переопределили значения элементов массива LongMonth-Names).

3. Спецификаторы могут быть указаны как в верхнем, так и в нижнем регистрах символов — это не играет роли.

Илон Маск рекомендует:  Сортировка шелла
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL