Отправляет email-рассылки с помощью сервиса Sendsay

Delphi на каждый день

  Все выпуски  

Delphi на каждый день . Выпуск #2


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

#2

Delphi на каждый день
Выпуск #2 - Сентябрь 2001 года

Этот выпуск для Вас подготовил Баринов Александр.

Здравствуйте, уважаемые подписчики!

Сегодня наша беседа пойдет о Дате и о Времени! ...которое бежит, которое нельзя остановить, но, которое, однако, можно посчитать. Этим мы и займемся.

И еще одна новость: 13 сентября открылся Официальный сайт рассылки "Delphi на каждый день". Здесь Вы найдете архивы предыдущих версий, а также архивы с примерами (к каждому выпуску), где можно посмотреть, как работает тот или иной алгоритм, приведенный в выпуске, а также научиться применять эти алгоритмы на практике. Добро пожаловать на сайт рассылки!

Выход архива с примерами для этого выпуска планируется на 24 сентября 2001 года.


Урок

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

Тип TDateTime

Как для хранения времени, так и для хранения даты в Delphi используется тип TDataTime (type TDataTime = type Double;). Отсюда видно, что дата и время обозначается просто действительным числом. Причем число 0 соответствует дате 30.12.1899 00:00. Каждая единица обозначает один день. То есть TDateTime=1 означает 31.12.1899 00:00, а TDateTime=1.25 обозначает уже 31.12.1899 06:00 (так как 0.25 = 1/4 дня = 6 часов).

Отрицательные числа же в результате дают дату до 30.12.1899. Например, TDateTime=-1.25 вернет такое значение: 29.12.1899 06:00 (то есть -1 день, но +0.25 дня - то есть 6 часов).

На этом, видимо, с типом все - понять этот тип не сложно. Кроме того, компилятор не видит различий между типами TDateTime и Double, поэтому в программе они могут быть спокойно взаимозаменяемы.

TDateTime >>> String

Естественно, для нас имеет большую практическую пользу тип String (это я к тому, что String и на экран можно вывести без особых проблем). Поэтому, для перевода типа TDataTime в тип String существует достаточно много функций. Рассмотрим их.

function DateTimeToStr(DateTime: TDateTime): string;
Самая простая функция перевода, не требует никаких дополнительных параметров. Функция возвращает дату/время в так называемом "кратком формате" (посмотреть как он выглядит и настроить его можно в "Панели управления"; чаще всего это, например, 01.05.98).
Такой формат можно применять там, где не столь важны большие промежутки времени - века, например - так как век из такого формата узнать невозможно. Применение эта функция может найти в бизнес приложениях (торговля, бухгалтерский учет, учет чего-либо и так далее).

Также можно переводить дату в String и время в String отдельно. Для этого есть две функции:
function DateToStr(Date: TDateTime): string - дата в String,
function TimeToStr(Time: TDateTime): string - время в String.
По этим двум функциям - никаких комментариев.

function FormatDateTime(const Format: string; DateTime: TDateTime): string;
Эта функция, также как и предыдущая возвращает дату/время, но единственным и самым важным отличием этой функции от предыдущей является то, что функция возвращает дату/время в заданном формате, который указывается в константе Format. Рассмотрим теперь, как можно форматировать переменную TDateTime.

Константа
Что обозначает
c
дата в "Кратком формате" и время в "Полном формате" (время выводится если оно не равно 00:00:00). Фактически функции DateTimeToStr(N) и FormatDateTime('c', N) одно и то же.
d
число месяца, без ноля впереди у однозначных чисел (1-31).
dd
число месяца, с нолем впереди у однозначных чисел (01-31).
ddd
день недели как аббревиатуру (Sun-Sat или Пн-Вс)*.
dddd
день недели полностью (Sunday-Saturday или Понедельник-Воскресенье)*.
ddddd
дата в "Кратком формате".
dddddd
дата в "Полном формате".
m
месяц, без ноля впереди у однозначных чисел (1-12). Если, однако, константа m стоит после h или hh (смотри ниже), то m принимает значение n (смотри ниже).
mm
месяц, с нулем впереди у однозначных чисел (01-12). Если, однако, константа mm стоит после h или hh (смотри ниже), то mm принимает значение nn (смотри ниже).
mmm
месяц как аббревиатуру (Jan-Dec или Янв-Дек)*.
mmmm
месяц полностью (January-December или Январь-Декабрь)*.
yy
год, обозначаемый двуми цифрами (00-99).
yyyy
год, обозначаемый четырьмя цифрами (0000-9999).
h
час, без ноля впереди у однозначных чисел (0-23).
hh
час, с нолем впереди у однозначных чисел (00-23).
n
минуты, без ноля впереди у однозначных чисел (0-59).
nn
минуты, с нолем впереди у однозначных чисел (00-59).
s
секунды, без ноля впереди у однозначных чисел (0-59).
ss
секунды, с нолем впереди у однозначных чисел (00-59).
z
миллисекунды, без ноля впереди у однозначных и двузначных чисел (0-999).
zzz
миллисекунды, с нолем впереди у однозначных и двузначных чисел (000-999).
t
время в формате "Краткий формат времени".
tt
время в формате "Полный формат времени".
am/pm
время выводится в 12-ти часовом формате. Время до полудня обозначается как am, а после полудня - pm. Данная константа может быть написана большими буквами, маленькими буквами или смешанно. Соответственно, результат будет отображаться так же.
a/p
все то же самое, что и в случае с am/pm, но время до полудня и после оного обозначается, соответственно, как a и p.
ampm
все то же самое, что и в предыдущих случаях, но для разделения полудня используются константы, принятые в системе по умолчанию (см. "Панель управления" > "Язык и стандарты" > "Время" пункты "Обозначение времени до полудня" и "Обозначение времени после полудня").
/
разделитель даты, принятый в системе по умолчанию (в России это обычно "." - например "01.01.2001"). Это также можно настроить в Панели управления.
:
разделитель времени, принятый в системе по умолчанию (в России это обычно ":" - например "12:34:00"). Также настраивается в Панели управления.
'xx' или "xx"
Все, что находится между кавычек отображается как есть, без каких-либо преобразований. Лично мое субъективное мнение заключается в том, что в Delphi лучше использовать двойные кавычки, так как одинарные обозначают начало и конец типа String - легко будет запутаться.

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

Как Вы видите, значений констант предостаточно, чтобы "сотворить" тот форматы даты, который Вам требуется. Более того, в таком разнообразии не представляет огромного труда запутаться, поэтому приведу несколько примеров...

Примеры (во всех примерах приведено возможный результат):

FormatDateTime('dd/mm/yyyy h-nn-ss', DateTime) - "01.01.2001 9-04-05".
FormatDateTime('dd/m/yy hh+n+s (zzz)', DateTime) - "01.1.01 09+4+5 (002)".
FormatDateTime('Am/Pm h:nn:ss.zzz', DateTime) - "Am 9:04:05.002".
FormatDateTime('"Am/Pm" h:nn:ss.zzz', DateTime) - "Am/Pm 9:04:05.002".

В архиве примеров представлена возможность по введенной маске получить текущие дату/время в заданном формате.

В принципе, это все, что нужно знать для качественного перевода даты/времени в тип String. (Да простят меня читатели, что строковый тип я везде называю String'ом).

Еще о функциях...

Перевод в String - это, конечно, хорошо, но не переводом единым жив человек. Для составления программы понадобятся, конечно же, еще и другие различные функции и процедуры, связанные с TDateTime. О них сейчас и поговорим.

И сразу же на ум приходит function Now: TDateTime. Эта маленькая, замечательная функция, как можно догадаться из названия возвращает текущие дату/время, естественно те, которые установлены на компьютере. Используется она везде, где только можно. Думаю, не надо Вам это объяснять.

А вслед за этой функцией идут еще две: function Date: TDateTime и function Time: TDateTime. Первая из них возвращает текущую дату, а вторая - текущее время. В этих случаях, как и предыдущем (с функцией Now) дата и время возвращаются в типе TDateTime (что видно из описания функции).

Тут уж нельзя не вспомнить и о функции function DayOfWeek(Date: TDateTime): Integer, которая по заданной дате (тип TDateTime) возвращает день недели, причем 1 = воскресенье, а 7 = суббота.

Ну, и напоследок - function IsLeapYear(Year: Word): Boolean. Возвращает True, если год - високосный, в противном случае False.

To be continued...

Это, конечно, не полный список всех функций работы со временем. Но, здесь представлены самые важные. В следующем выпуске мы рассмотрим другие, оставшиеся, функции. Благо их еще предостаточно.



Обобщение

type TDataTime (= type Double) - тип, используемый для хранения даты/времени.

function DateTimeToStr(DateTime: TDateTime): string - перевод даты/времени в строковый тип.
function DateToStr(Date: TDateTime): string - перевод только даты в строковый тип.
function TimeToStr(Time: TDateTime): string - перевод только времени в строковый тип.
function FormatDateTime(const Format: string; DateTime: TDateTime): string - перевод даты и времени в строковый тип в заданном формате.
function Now: TDateTime - возвращает текущие дату/время.
function Date: TDateTime - возвращает текущую дату.
function Time: TDateTime - возвращает текущее время.
function DayOfWeek(Date: TDateTime): Integer - возвращает текущий день недели.
function IsLeapYear(Year: Word): Boolean - определяет високосный ли год.

Заключение

Если Вам понравилась рассылка, перешлите ее друзьям. Пусть они почитают и тоже подпишутся. А подписаться можно прямо здесь. Для этого достаточно ввести Ваш e-mail и нажать кнопку Ok.

Рассылки Subscribe.Ru
Delphi на каждый день

До скорой встречи!
Всегда Ваш Баринов Александр



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное