Обработка календарных дат и времени в приложениях. Изучение и применение встроенных функций и процедур и компонентов Delphi для ввода, отображения и вычисления времени и даты
Страницы работы
Фрагмент текста работы
ЛАБОРАТОРНАЯ РАБОТА ПММ-Delphi-05
ОБРАБОТКА КАЛЕНДАРНЫХ ДАТ И ВРЕМЕНИ В ПРИЛОЖЕНИЯХ
Цель работы: изучение и применение встроенных функций и процедур и компонентов Delphi для ввода, отображения и вычисления времени и даты
1. Компоненты ввода даты и времени
В Delphi имеются компоненты, позволяющие вводить, отображать и редактировать числа, даты и время. Их применение более удобно, чем использование компонентов Label и Edit.
(окно ввода дат и времени)
Ввод даты (с выпадающим календарем выбранного месяца) или ввод времени.
Основные свойства — Date и Time.
Ввод дат с выбором из календаря выбранного месяца. Аналогичен
DateTimePicker, но календарь полностью виден на форме
Отображение календаря на указанный месяц. Основные свойства — Month и Day.
Из этих компонентов наиболее удобным является DateTimePicker. Этот компонент может использоваться и для ввода даты (свойство Kind имеет значение dtkDate) и для ввода времени (свойство Kind имеет значение dtkTime). На форме компонент занимает немного места, так как реализует режим появления выпадающего календаря. Это обеспечивает также безошибочный с точки зрения синтаксиса ввод дат и времени.
При вводе дат можно задать свойство DateMode равным dmComboBox — наличие выпадающего календаря, или равным dmUpDown — наличие кнопок увеличения и уменьшения. В последнем случае пользователь может независимо устанавливать с помощью кнопок число, месяц и год. Формат представления дат определяется свойством DateFormat, которое может принимать значения dfShort — краткий формат (например, 01.12.2008), или dfLong — полный формат (например, 1 декабря 2008 г.).
Свойство DateTimePicker.Date можно использовать в программе, причем для преобразования значения свойства в строку можно воспользоваться функцией DateToStr.
Можно задать значения свойств MaxDate и MinDate, определяющих соответственно максимальную и минимальную дату, которую может выбрать пользователь.
В режиме ввода времени dtkTime введенное пользователем значение можно найти в свойстве DateTimePicker.Time, тип которого — тот же рассмотренный выше TDateTime. Преобразовать время в строку можно функцией TimeToStr.
Упражнение 1. Выбор дня текущего месяца с помощью компонента
Дополните проект компонентами DateTimePicker1 и Label3
Свойство Label3.Caption задайте как «Выбрана дата: »
Компонент Label3 будем использовать для отображения даты, выбранной при работе программы с помощью компонента DateTimePicker1. Факту выбора даты соответствует событие OnChange этого компонента. Перейдите к процедуре, обрабатывающей это событие и наберите команду
Procedure TForm1.DateTimePicker1Change(Sender: TObject); begin
‘Выбрана дата: ‘+DateToStr(DateTimePicker1.Date); end;
Проверьте работу программы.
Выберите в инспекторе объектов другие значения свойств DateFormat и DateMode. Как они влияют на вид даты в окне компонента и его работу при запуске программы?
Упражнение 2. Ввод произвольной даты с помощью DateTimePicker и отображение с помощью календаря.
Дополните проект компонентом Calendar (палитра Samples). Выровняйте границы компонента на форме. Календарь показывает дни определенного месяца, если не дополнительных указаний, то это – текущий месяц.
Свойства календаря Day, Month, Year позволяют настроить его содержимое на нужную дату. Для проверки работы этого компонента добавьте в обработчик компонента DateTimePicker1 команды, которые изменяют параметры календаря в соответствии с выбранной датой. При этом отдельно устанавливаются численные значения года, месяца и дня. Для получения этих значений используется процедура DecodeDate. Удобно получаемую от DateTimePicker1 дату сохранить в отдельной переменной типа tDateTime, а значения года, месяца и дня сохранить в переменных целого типа. Тогда процедура – обработчик примет вид
Procedure TForm1.DateTimePicker1Change(Sender: TObject); var
Dt:tDateTime; Y,M,D: Word; begin
Label4.Caption:=’Выбрана дата: ‘+DateToStr(Dt);
Calendar1.Month:=M; Calendar1.Day:=D; end;
2. Ввод текстовой и числовой информации. Компонент ComboBox
Компонент ComboBox позволяет выбрать нужный элемент (строку или число) из списка доступных элементов. Список отображается как в развернутом виде, так и в виде выпадающего
Справочник по компонентам 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. Спецификаторы могут быть указаны как в верхнем, так и в нижнем регистрах символов — это не играет роли.
Time — Функция Delphi
procedure TForm1.Button1Click(Sender: TObject);
begin
t1:=now;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
diff:=now-t1;
edit1.text:=TimeTostr(diff);
end;
в результате в поле edit1 отображается время прошедшее между последовательными нажатиями button1 и button2 в следующем формате hh:mm:ss Пойдет?
если вместо TimeTostr(diff) использовать FormatFloat(‘0.00’,diff*24*60*60);
то промежуток времени будет выражен в секундах с сотыми долями. sysutils коорый используется функией now ввключается в uses лист форм по умолчанию.
Time — Функция Delphi
уЕТЧЕТ РПДДЕТЦЙЧБЕФУС
ЛБЖЕДТПК ЙОЖПТНБФЙЛЙ Й ЧЩЮЙУМЙФЕМШОПК ФЕИОЙЛЙ зТзх
ФЕМ. +375-(0)152-445-101
E-mail : kadan@grsu.grodno.by
уРТБЧПЮОЙЛ РП ЖХОЛГЙСН Delphi. тБВПФБ У ДБФБНЙ Й ЧТЕНЕОЕН
ч Delphi ДМС ИТБОЕОЙС ДБФ Щ Й (ЙМЙ) ЧТЕНЕОЙ РТЕДХУНПФТЕО ЖПТНБФ TDateTime, РТЕДУФБЧМСАЭЙК УПВПК, ОБ УБНПН ДЕМЕ, ПВЩЮОПЕ ЮЙУМП У РМБЧБАЭЕК ФПЮЛПК.
рТЙ ЬФПН ДБФБ РТЕДУФБЧМСЕФУС ГЕМПК ЮБУФША ЮЙУМБ, Б ЧТЕНС ? ДТПВОПК. рТЕЙНХЭЕУФЧП ЬФПЗП РПДИПДБ Ч ФПН, ЮФП ФЕРЕТШ ДБФЩ Й ЧТЕНЕОБ НПЦОП ЛПТТЕЛФОП УЛМБДЩЧБФШ Й ЧЩЮЙФБФШ, ОБРТЙНЕТ:
Date and Time Support
This topic lists all types, routines, and variables that add Date and Time support.
Contents
Date and Time Data Types
The following table lists the data types used to store date and time:
Routine | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Routine | Description | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Routine | Description | ||||||||
---|---|---|---|---|---|---|---|---|---|
СВОЙСТВО | НАЗНАЧЕНИЕ |
Enabled | «Включение-выключение» таймера |
Interval | Интервал срабатывания (в миллисекундах) |
Name | Имя компонента в программе |
Tag | Произвольный числовой параметр |
Помещаем компонент Delphi Timer на Форму. Задаём в свойстве Interval нужный интервал времени (измеряется в миллисекундах). Переходим на вкладку Events и видим единственное событие, поддерживаемое компонентом Delphi Timer: OnTimer. Выполнив по нему двойной щелчёк, или также двойной щелчёк по самому компоненту, мы попадём в сформированный средой Delphi обработчик события, где и введём код, предусматривающий выполнение тех или иных действий.
Так как по умолчанию сойство Enabled установлено в True, то в программе через установленный в свойстве Interval промежуток времени таймер сработает, то есть выдаст событие OnTimer. Будут выполнены необходимые действия. Иногда же запланированные действия должны произойти не автоматически при старте программы, а при выполнении каких-либо других действий. В этом случае необходимо свойство Enabled в Инспекторе Объектов установить в False. Затем в необходимый момент нужно выполнить команду:
Учтите, что пока Timer1.Enabled равно True, компонент продолжит генерировать событие OnTimer по истечении каждого промежутка времени, равного значению свойcтва Interval. Поэтому, если нужно только единичное срабатывание, то таймер нужно остановить, причём сразу же:
Если же запрограммировать «выключение» таймера после выполнения предусмотренных в программе действий, то при достаточно малом по сравнению с продолжительностью необходимых действий значении свойства Interval таймер вновь сработает, и это может помешать ходу программы.
Компонент Delphi Timer не является очень точным и не подходит для измерения малых промежутков времени. Его точность порядка 50 миллисекунд. В качестве примера приведу простую программу, отображающую текущее время.
На форме будут только компонент Label и собственно наш компонент Delphi Timer. Свойство Timer можно оставить равным 1000, но раньше на более медленных компьютерах приходилось отображать время несколько раз в секунду, так как из-за влияния других выполняемых компьютером процессов выводимые раз в секунду показания «плавали», что было хорошо заметно на глаз. Размер шрифта возьмём побольше — 50, и подберём более гладкий, я взял Bell MT. Растянем на всю Форму: Align=alClient. Ну и, собственно, сам код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption:=TimeToStr(Now);
end;
Вот и всё! Delphi Now — это системная функция, возвращающая текущую дату-время в соответствующем формате TDateTime. Если преобразовывать её в строку функцией TimeToStr, то она вернёт текущее время, если DateToStr, то текущую дату. Если мы хотим отображать в нашей программе и дату тоже, достаточно поставить ещё один компонент Label, и функцией DateToStr передавать в него дату. Можете скачать проект.
Time — Функция Delphi
Полную версию библиотеки KOL и MCK можно скачать здесь.
function Now: TDateTime;
Возвращает текущую датау и время на вашем компьютере. TDateTime в KOL ни чем не отличается от VCL аналога. TDateTime представляет из себя число с плавающей запятой (т.е. Double), целая часть которого содержит число дней, отсчитанное от некоторого начала календаря, а дробная часть равна части 24-часового дня, т.е. характеризует время и не относится к дате.
function CompareSystemTime( const D1, D2: TSystemTime ): Integer;
Функция сравнивает 2-е записи типа TSystemTime. На выходе:
-1 если D1 D2.
TSystemTime — структура используемая в Winddows API для хранения данных о датах и времени. IMHO зачастую она даже удобней в использование обычной TDateTime.
Подробней конечно можно посмотреть и в Win32.hlp, но всетаки.
Для получения системного времени : GetSystemTime
Для установки системного времени на вашем компьютере: SetSystemTime
procedure IncDays( var SystemTime: TSystemTime; DaysNum: Integer );
Увеличивает или уменьщает количество дней в записи типа TSystemTime. DaysNum может быть отрицательным.
procedure IncMonths( var SystemTime: TSystemTime; MonthsNum: Integer );
Увеличивает или уменьщает количество дней в записи типа TSystemTime. DaysNum может быть отрицательным. Правильный результат не гарантирован если число дней превышено для нового месяца
function IsLeapYear( Year: Word ): Boolean; .
Возвращает true если указанные год Year является высокосным (то есть имеет 29 дней в Феврале).
function DayOfWeek( Date: TDateTime ): Integer;
Возвращает день недели (от 0 до 6) для текушей даты.
function SystemTime2DateTime( const SystemTime: TSystemTime; var DateTime: TDateTime ): Boolean;
Преобразует дату из типа TSystemTime в TDateTime
function DateTime2SystemTime( const DateTime: TDateTime; var SystemTime: TSystemTime ): Boolean;
Преобразует дату из типа TDateTime в TSystemTime.
function CatholicEaster( nYear: Integer ): TDateTime;
Возвращает дату католического рождества в указаном году
Delphi
Наши проекты
Очень просто. Существует функция Time в модуле SysUtils.
Возвращает функция значение типа TDateTime. А его преобразовать в строку? Так же просто:
Существует и обратная операция:
Аналогичные операции можно проделать и с датой:
Преобразовать в строку:
Так же существует и обратная операция:
Copyright © 2008 — 2020 Программирование на Delphi для начинающих и не только.
Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам.
Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации.
Time — Функция Delphi
В этом уроке я покажу, как узнавать в Delphi текущее время и дату.
[cc lang=’delphi’]var
Hour, Min, Sec, MSec: Word;[/cc]
В дальнейшем мы будем использовать эти переменные для хранения текущего времени, а именно: часов, минут, секунд и миллисекунд соответственно.
[cc lang=’delphi’]var
D, M, Y: String;[/cc]
А эти переменные будут хранить текущий день, месяц и год.
Теперь запишем текущие дату и время в эти переменные:
DecodeTime(Time, Hour, Min, Sec, MSec); //получаем время
D:=FormatDateTime(‘dd’,Date); // получаем дату
M:=FormatDateTime(‘mm’,Date);
Y:=FormatDateTime(‘yy’,Date);
[/cc]
В этом примере мы использовали константы Date и Time, которые всегда в себе хранят время и дату. Константа Date принадлежит типу TDate, а Time принадлежит типу TTime.
Например, после приведенного выше кода, мы можем вывести на экран текущий год:
А вывести текущий час, можно так:
Конечно же, мы можем объявлять свои переменные типов TDate, TTime, а также TDateTime, который хранит в себе и время и дату (существует константа Now, аналогичная Date и Time, но типа TDateTime). Далее я привожу полезные функции и процедуры, для работы с этими переменными:
DateTimeToString(Result, Format, DateTime) — Эта процедура позволяет формировать строковое представление параметра DateTime с учетом формата, заданного строкой Format, и помещает результат в строку Result.
DateTimeToStr(DateTime) — строковое (String) представление даты и времени. Эта функция формирует для параметра DateTime строковое представление даты и времени с учетом региональной установки Windows, возвращая полученную строку.
DateToStr(Date) — символьное представление даты. Функция формирует для параметра Date типа TDateTime или TDate символьное представление даты с учетом региональной установки Windows и возвращает полученную строку в качестве результата своей работы.
TimeToStr(Time) — символьное представление времени. Функция формирует для параметра Time типа TDateTime или TTime символьное представление времени с учетом региональной установки Windows и возвращает полученную строку в качестве результата своей работы.
DecodeTime(Date, Hour, Min, Sec, MSec) — выделение во времени часа, минуты, секунды и числа миллисекунд. Процедура выделяет из параметра Date типа TDateTime или TTime час, минуту, секунду и число миллисекунд и помещает их соответственно в параметры Hour, Min, Sec и MSec типа Word.
DayOfWeek(Date) — день недели. Функция возвращает день недели заданной даты Date типа TDateTime или TDate в виде числа от 1 до 7, причем нумерация начинается с воскресенья.
DecodeDate(Date, Year, Month, Day) — выделение в дате года, месяца, дня. Процедура выделяет из параметра Date типа TDateTime или TDate год, месяц, день и помещает их соответственно в параметры Year, Month и Day типа Word.
EncodeDate(Year, Month, Day) — формирование даты из компонентов даты. Функция формирует из заданного года, месяца и дня (заданных в параметрах Year, Month, Day) комплексный параметр типа TDateTime и возвращает его как результат работы.
EncodeTime(Hour, Min, Sec, MSec) — формирование времени из компонентов времени. Функция формирует из заданных часа, минуты, секунды и числа миллисекунд (заданных в параметрах Hour, Min, Sec, MSec) комплексный параметр типа TDateTime и возвращает его как результат работы.
FormatDateTime(Format, DateTime) — форматированное символьное представление даты и времени. Функция формирует символьное представление параметра DateTime типа TDateTime с учетом формата, заданного строкой Format, и возвращает полученную строку как результат своей работы.
StrToDate(S) — преобразование символьного представления даты в тип TDateTime. Функция преобразовывает символьное представление даты, находящееся в строке S, в формат TDateTime или TDate и возвращает полученную величину как результат своей работы. Дата должна быть задана в соответствии с региональной установкой Windows.
StrToTime(S) — преобразование символьного представления времени в тип TDateTime. Функция преобразовывает символьное представление времени, находящееся в строке S, в формат TDateTime или TTime и возвращает полученную величину как результат своей работы. Время должно быть задано в соответствии с региональной установкой Windows.
StrToDateTime(S) — преобразование символьного представления даты и времени в тип TDateTime. Функция преобразовывает символьное представление даты и времени, находящееся в строке S, в формат TDateTime и возвращает полученную величину как результат своей работы. Дата и время должны быть заданы в соответствии с региональной установкой Windows.