Пропустить навигацию.
Главная

Данные типа TDateTime в системах BCB и Delphi

В рассматриваемых средах данные типа дата/время представлены объектами, порожденными классом TDateTime, в котором описан единственный элемент данных формата double (8-байтовое вещественное число). Целая часть этого числа равна числу дней, прошедших от полуночи 30 декабря 1899 года, дробная часть определяет время дня (0.0 соответствует началу суток, 0.5 — 12 часам пополудни, 0.99…9 — концу суток). Упаковка данных временного типа, представленных в одном из форматов, принятых в Windows, их распаковка и извлечение нужных компонент (день, месяц, год, часы, минуты, секунды, день недели и т.п.) осуществляют соответствующие функции (методы), принадлежащие классу TDateTime. Перечень наиболее важных функций приведен в табл. 9.2. Переменные dt и as, использованные в этой таблице, имеют тип DateTime и AnsiString (в Delphi — типа String), соответственно. В системе Delphi 6.0 общее количество функций раздела time/date routines превышает 160, но большинство из них нельзя отнести к предметам первой необходимости.

Таблица 9.2

Формат вызова функции/метода (BCB)

Назначение

dt=CurrentDate();

Опрос текущей даты

dt=CurrentDateTime();

Опрос текущей даты и текущего времени

dt=CurrentTime();

Опрос текущего времени

as=dt.DateString()

Преобразование даты в строку

as=dt.DateTimeString();

Преобразование даты и времени в строку

int k=dt.DayOfWeek();

Определение дня недели (1– воскресенье, 7 — суббота)

dt.DecodeDate(&year,&month,

&day);

Распаковка даты (все аргументы типа unsigned short)

dt.DecodeTime(&hour,&min,&sec,

&msec);

Распаковка времени (все аргументы типа unsigned short)

int k=dt.FileDate();

Преобразование даты в формат времени создания файла в MS-DOS

dt=FileDateToDateTime(int k);

Преобразование даты создания файла в формат типа TDateTime

as=dt.FormatString(“format”);

Преобразование даты и времени в строку по заданному формату

TDateTime dt[([arg])];

Объявление и инициализация данных типа TDateTime

as=dt.TimeString();

Преобразование времени в строку

Остановимся несколько подробнее на объявлении и возможной инициализации переменных типа DateTime с помощью метода TDateTime, который принято называть конструктором. Аргумент в этом методе может отсутствовать вообще (TDateTime dt;) и тогда в программе появляется неинициализированная переменная dt, занимающая в оперативной памяти 8 байт. Если в таком объявлении присутствуют пустые скобки или задан нулевой аргумент, то переменной dt присваивается значение 0, что соответствует 24 часам 30 декабря 1899 года (т.е. точке начала отсчета календарных дат). В качестве аргумента arg может быть задано вещественное число или имя переменной типа DateTime, которой ранее было присвоено значение. Тогда это же значение и будет начальным для переменной dt. Наконец, аргумент arg может быть представлен списком из трех или четырех целочисленных значений:

TDateTime d(2001,9,29); // год, месяц, число

TDateTime t(22,30,15,0); // часы, минуты, секунды, доли секунд

Очень много возможностей по преобразованию данных типа DateTime в строку предоставляют форматные указатели в методе FormatString. Так, например, день месяца может быть представлен в результирующей строке как число из интервала [1, 31] (указатель d), двузначное число из интервала [01, 31] (указатель dd), сокращенное (указатель ddd) или полное (указатель ddddd) обозначение дня недели, число и сокращенное (указатель dddd) или полное (указатель dddddd) обозначение дня недели. Такие же возможности имеются и для обозначения месяца (порядковый номер в году — m, сокращенное — mm или полное — mmm наименование месяца). Год может отображаться как двухзначное (yy) или четырехзначное (yyyy) число. Аналогичные способы управления распространяются и на все компоненты времени.

Над данными типа DateTime в BCB определены операции сложения (+, ++) и вычитания (-, --). Их можно сравнивать, используя все операции отношения.