Данные типа 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 определены операции сложения (+, ++) и вычитания (-, --). Их можно сравнивать, используя все операции отношения.
