Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 2 семестр.doc
Скачиваний:
42
Добавлен:
27.05.2015
Размер:
777.73 Кб
Скачать

9. Работа с датами

В этой лекции вы познакомитесь с функциями преобразования дат, познакомитесь с глобальными переменными DateSeparator и ShortDateFormat, с компонентами выбора дат DateTimePicker и MonthCalendar и напишите приложение, использующее новые темы.

9.1. Преобразование даты

До сих пор мы еще не сталкивались с типом данных Дата. Тем не менее, этот тип очень широко используется в программировании. В Delphi он называется TDateTime, то есть, возвращает одновременно и дату, и время. Из-за такой его универсальности часто приходится применять функции преобразования, чтобы вернуть только дату, или только время, причем в разных форматах.

Date()

Эта функция возвращает текущие дату и время в формате TDateTime. Ее можно применять с другими функциями, задавая им в качестве параметра текущую дату. Пример:

DateToStr(Date());

DateToStr()

Возвращает указанную в параметре дату в виде строки. Например,

ShowMessage(DateToStr(Date()));

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

StrToDate()

Эта функция напротив, принимает в качестве параметра строку, в которой записали дату в правильном формате, и возвращает эту дату в виде TDateTime. Сложность заключается в том, что форматов для предоставления даты может быть много. У нас, например, принято вначале указывать день, потом месяц, и в конце год. А американцы первым указывают месяц, затем число и год. Причем год может быть как 4-х символьным (2007), так и 2-х символьным (07). Еще проблема с разделителями. Разделителем может служить и точка (20.09.2007), и знак слэш (20/09/2007).

Правильную настройку можно увидеть в окне Панель управления – Язык и региональные стандарты. Кроме того, пример

ShowMessage(DateToStr(Date()));

также вернет вам дату в виде строки в правильном формате. Если же вы желаете использовать эти функции для программ на продажу, и не знаете, какие настройки на компьютере покупателя, то придется использовать неявные глобальные переменные. Переменная DateSeparator содержит символ – разделитель дат. Порядок следования дня, месяца и года определяется глобальной переменной ShortDateFormat. Возможны следующие комбинации: месяц/день/год, день/месяц/год и год/месяц/день.

Например:

procedure TForm1.Button1Click(Sender: TObject);

begin

DateSeparator := '-';

ShortDateFormat := 'm/d/yyyy';

Label1.Caption := DateToStr(Date);

end;

Здесь мы не просто смотрим значение DateSeparator и ShortDateFormat, а присваиваем им новое значение. В дальнейшем, вывод дат будет осуществляться уже по новым правилам. Так, для даты 15.09.1994 в свойство Caption компонента Label1 будет записан текст "9-15-1994". Если бы мы указали

ShortDateFormat := 'mm/dd/yyyy'; То выводимые месяц и день были бы с нулями, если они меньше 10: "09-15-1994"

FormatDateTime() - эта функция возвращает дату и время в виде строки в указанном формате. Очень интересная функция, чаще всего используют именно ее, чтобы вывести строку нужного формата. У функции есть два параметра, первым указывается формат строки, в котором нужно вернуть дату. Второй параметр – переменная типа TDateTime, которую нужно преобразовать в строку. В качестве второго параметра также можно использовать функцию Date(), если требуется преобразовать текущие дату и время. Эту функцию можно сравнить с функцией FloatFormat(), которую мы изучали в прошлой лекции. Самое интересное в этой функции – формат строки, или маска. Он может содержать следующие символы:

d – показать день, не подставляя нули в начале: 1, 2, 12

dd – показать день с подстановкой нулей в начале: 01, 02, 12

ddd – показать день недели в коротком формате: Пн, Вт, Ср

dddd – показать полный день недели: Понедельник, Вторник, Среда

m – показать месяц без нулей: 1, 2, 10

mm – показать месяц с нулями: 01, 02, 10

mmm – показать короткое название месяца: Янв, Фев

mmmm – показать полное название месяца: Январь, Февраль

yy – показать короткий год: 07, 98, 00

yyyy – показать полный год: 2007, 1998, 2000

h – показать часы, не добавляя нулей: 3, 5, 12

hh – показать часы с нулями: 03, 05, 12

n – минуты без нулей: 3, 5, 12

nn – минуты с нулями: 03, 05, 12

s – секунды без нуля впереди: 3, 7, 30

ss – секунды с нулями: 03, 07, 30

Это практически полный набор форматов, которые вам могут пригодиться. Примеры использования:

ShowMessage (FormatDateTime('Сегодня dddd dd mmm yyyy г.', Date));

//Результат: Сегодня Среда 06 Фев 2008 г.

ShowMessage (FormatDateTime('Сегодня dd.mm.yyyy г.', Date));

//Результат: Сегодня 06.02.2008 г.

Обратите внимание, что после функции Date не указаны скобки. Это не ошибка. Если у функции нет параметров, ее можно указывать и без скобок.

Время можно указывать с разделителями:

ShowMessage(FormatDateTime('Текущее время: hh:nn:ss', Date));

//Результат: Текущее время: 05:28:15