FormatDateTime — Функция Delphi


Справочник по компонентам 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. Спецификаторы могут быть указаны как в верхнем, так и в нижнем регистрах символов — это не играет роли.

FormatDateTime — Функция Delphi

Привет всем!
Следующий трабл:
Делаю —
S := FormatDateTime(LongDateFormat, Date);
В итоге в S получается что-то вроде: «9 Июнь 2003»

А в настройках системы (Языки и стандарты) на вкладке дата пример следующий: 9 Июн я 2003.
Т. е. месяц склоняется.

Как сделать так, чтобы дата писалась также как в системе?

Я делаю так, но, возможно, есть более изящный способ.

var
month: array[1..12] of string;
begin
month[1] := «января»;
month[2] := «февраля»;
month[3] := «марта»;
month[4] := «апреля»;
month[5] := «мая»;
month[6] := «июня»;
month[7] := «июля»;
month[8] := «августа»;
month[9] := «сентября»;
month[10] := «октября»;
month[11] := «ноября»;
month[12] := «декабря»;
S:=FormatDateTime(«d «+month[MonthOfTheYear(Date)]+» yyyy г.»,
Date);
end;

Дело в том что мне надо, чтоб писалось как в системе.
т. е. там может быль месяц текстом или числом, год четырех- или двухзначный и т.д. Вообщем, чтоб написание даты совпадало с системным.

Ты должен сам выбрать в каком виде хочешь получить дату. Вот несколько примеров:

1) FormatDateTime(«d.mm.yyyy»,Date);//Например, 1.01.2003
2) FormatDateTime(«dd.mm.yy»,Date);//Например, 1.01.03
3) FormatDateTime(«d «+month[MonthOfTheYear(Date)]+» yyyy г.»,
Date);//Например, 1 января 2003 г.

и т.д. Всё зависит от строки форматирования(в одинарных кавычках). Почитай в Help»e по FormatDateTime

function DateInRussian(DT : TDateTime) : string;
var
TempSysTime: TSystemTime;
FineDate: array[0..32] of Char;
begin
DateTimeToSystemTime(DT,TempSysTime); //

А нет ли универсальной функции?
Может меня не поняли, но не я задаю формат даты, а пользователь, который задает этот формат сам как пожелает. При этом он может захотеть месяц строкой или числом.

в Unit SysUtils в интерфейсе лежит массив

LongMonthNames[1] := «января»;
LongMonthNames[2] := «февраля»;
LongMonthNames[3] := «марта»;
LongMonthNames[4] := «апреля»;
LongMonthNames[5] := «мая»;
LongMonthNames[6] := «июня»;
LongMonthNames[7] := «июля»;
LongMonthNames[8] := «августа»;
LongMonthNames[9] := «сентября»;
LongMonthNames[10] := «октября»;
LongMonthNames[11] := «ноября»;
LongMonthNames[12] := «декабря»;

смотри ladybird © (09.06.03 12:30)
.
GetDateFormat(LOCALE_USER_DEFAULT,// locale for which date is to be formatted
DATE_USE_ALT_CALENDAR, // flags specifying function options
@TempSysTime, // date to be formatted
nil, // date format string
@FineDate, // buffer for storing formatted string
32 // size of buffer
);
и поиграй со вторым флажком
LOCALE_NOUSEROVERRIDE If set, the function formats the string using the system default date format for the specified locale. If not set, the function formats the string using any user overrides to the locale»s default date format.

DATE_SHORTDATE Use the short date format. This is the default. Cannot be used with DATE_LONGDATE.

DATE_LONGDATE Use the long date format. Cannot be used with DATE_SHORTDATE.

DATE_USE_ALT_CALENDAR Use the alternate calendar, if one exists, to format the date string. If this flag is set, the function uses the default format for that alternate calendar, rather than using any user overrides. The user overrides will be used only in the event that there is no default format for the specified alternate calendar.

Илон Маск рекомендует:  B жирный шрифт

2AbrosimovA (09.06.03 11:29)
2icWasya © (09.06.03 12:41)

>>сделай так
Не стоит. Это константы, и они уже определены в системы под текущую SYS_LOCALE

Спасибо!
функция GetDateFormat помогла.

Функция FormatDateTime

Вложения

прога.rar (381.4 Кб, 1 просмотров)
29.03.2020, 20:47

Formatdatetime вырезать функцию
Приветствую. Мне нужна одна лишь функция formatdatetime но если подключать sysutils махом.

Обратный отсчет в FormatDateTime
Доброго времени суток, CF! Я бы хотел узнать ответ на вопрос, можно ли в FormatDateTime сделать.

Почему FormatDateTime(‘mm’, Now); выводит всегда именно 06?
Мне нужно записать в отдельные переменные часы, минуты и секунды. Я ввожу этот код: Use.

Почему FormatDateTime не хочет преобразовываться во Float
Подскажите, почему FormatDateTime не хочет преобразовываться во Float. Задача отложить время по оси.

Как проверить, если строка является допустимым DateTime Формат строки в Delphi

Я хочу, чтобы пользователь мог вручную ввести формат даты и времени полей в программе. У меня есть компонент TEdit. Например, если пользователь вводит «HH: NN», то это действует строка формата даты и времени, а все компоненты DateTime должны изменить формат свойство, но если он входит в «ASD», это не так. Есть быстрый способ проверить это, не написав свою собственную функцию?

Вы можете использовать функции:


Они пытаются преобразовать строку в дату / время, и если преобразование завершается успешно, она возвращает истину. Таким образом, нет никаких исключений, поднятых.

Вы можете использовать необязательный параметр TFormatSettings, чтобы определить свой собственный формат.

Все функции определены в SysUtils.

Но есть некоторые элементы управления даты / времени, доступные в VCL, как TDateTimePicker и TMonthCalendar. Вы можете использовать их также.

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

Я не хотел бы подчеркнуть слишком много о проверке того, что они вступили в «правильный формат. Скорее просто дать им предварительный просмотр формата они вводятся с использованием текущей даты-времени.

Edit : Обновление для новой информации от OP

Было немного разъяснения по этому вопросу:

На самом деле мне нужно указать формат свойство TDateTimePicker и TDateTime поле в базе данных. И я хочу, чтобы пользователь мог изменить эти форматы. — Тофик Гасанов

Это важное уточнение, возможно, вы хотите, чтобы включить его в свой вопрос?

Важно то, что строка формата будет не только указать формат отображения, но и формат редактирования. Теперь, хотя в значительной степени любая строка действительно, не все особенно полезны (особенно для редактирования). Например:

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

Теперь ИМХО, если пользователь хочет , чтобы сделать их жизнь трудно не включая месяц поля в их формате строки — жестко! Проблема , однако приходит в том , что правила форматирования немного технические, и пользователь может получить месяцев и минуты перепутаны. Например , FTimeFormat := ‘HH:MM:SS’ что на самом деле : :

Тем не менее , я остаюсь при своем первоначальном предложении (с одной незначительной подстройкой): Скорее всего просто дать им предварительный просмотр формата они вводятся с использованием текущей даты и время , заранее определенная даты и времени , которые должны подчеркнуть «ошибку» в строке формата ,

Если у вас есть диалоговое окно конфигурации, в котором вы собираетесь позволить пользователю определить этот параметр:

  • Добавить TComboBox (вы можете «предварительной нагрузки» его строк выборки в руководстве пользователя, и они могут просто выбрать одну из ваших уже подходящих вариантов.
  • Добавить ярлык, в котором вы иллюстрировать поведение образца выбранной строки формата.
  • Реализовать TComboBox.OnChange, чтобы проиллюстрировать эффект выбора пользователя.

Следующий код должен сделать трюк:

ПРЕДУПРЕЖДЕНИЕ

Вы упомянули вы хотите использовать это для обоих TDateTimeField и TDateTimePicker . К сожалению, TDateTimePicker просто оборачивает встроенный Control Windows , которая не использует FormatDateTime, и , следовательно , также имеет различные правила для своих строк формата.

Так что я боюсь, что вы будете иметь, чтобы разрешить пользователям настроить две разные строки формата. :(

Strings. Format Date Time(DateTime, DateFormat) Метод

Определение

Возвращает строковое выражение, представляющее значение даты и времени. Returns a string expression representing a date/time value.

Параметры

Обязательный. Required. Форматируемое выражение Date . Date expression to be formatted.

Необязательный параметр. Optional. Числовое значение, указывающее используемый формат даты/времени. Numeric value that indicates the date/time format used. Если опущен, используется DateFormat.GeneralDate . If omitted, DateFormat.GeneralDate is used.

Возвраты

Строковое выражение, представляющее значение даты и времени. A string expression representing a date/time value.

Исключения

Параметр NamedFormat недопустим. NamedFormat setting is not valid.

Примеры

В этом примере демонстрируется использование функции FormatDateTime . This example demonstrates the use of the FormatDateTime function.

Комментарии

Тип данных Date всегда содержит сведения о дате и времени. The Date data type always contains both date and time information. В целях преобразования типов Visual Basic учитывает 1/1/1 (1 января 1 года) как нейтральное значение для даты, а 00:00:00 (полночь) — как нейтральное значение времени. For purposes of type conversion, Visual Basic considers 1/1/1 (January 1 of the year 1) to be a neutral value for the date, and 00:00:00 (midnight) to be a neutral value for the time. При форматировании значения Date в виде строки даты и времени FormatDateTime не включает нейтральные значения в результирующую строку. If you format a Date value as a date/time string, FormatDateTime does not include neutral values in the resulting string. Например, если преобразовать #1/1/0001 9:30:00 # в строку, результатом будет «9:30:00 AM»; сведения о дате подавляются. For example, if you convert #1/1/0001 9:30:00# to a string, the result is «9:30:00 AM»; the date information is suppressed. Однако сведения о дате по-прежнему содержатся в исходном значении Date и могут быть восстановлены с помощью таких функций, как DatePart . However, the date information is still present in the original Date value and can be recovered with functions such as DatePart .

Если аргумент Expression передается как литерал String , FormatDateTime интерпретирует его в соответствии с параметром CurrentCulture приложения. If you pass the Expression argument as a String literal, FormatDateTime interprets it according to the CurrentCulture setting of your application. Однако если передать его как литерал Date , используйте формат #mm/дд/ИИИИ #, так как FormatDateTime всегда интерпретирует литерал Date в соответствии с языком и региональными параметрами «Английский (США)». However, if you pass it as a Date literal, use the format #mm/dd/yyyy#, because FormatDateTime always interprets a Date literal according to the English (US) culture. Это необходимо, поскольку, если приложение разрабатывается и кодируется с использованием литералов Date из одного языка и региональных параметров, а затем выполняется на платформе с другим языком и региональными параметрами, литералы Date могут быть проанализированы неверно. This is necessary because, if an application is developed and coded using Date literals from one culture, but is then executed on a platform with a different culture, the Date literals could be parsed incorrectly.

Аргумент NamedFormat имеет следующие параметры. The NamedFormat argument has the following settings.

FormatDateTime — Функция Delphi

The Formatting string can comprise a mix of ordinary characters (that are passed unchanged to the result string), and data formatting characters. This formatting is best explained by the example code.

The following (non-Asian) formatting character strings can be used in the Formatting string:

y = Year last 2 digits
yy = Year last 2 digits
yyyy = Year as 4 digits
m = Month number no-leading 0
mm = Month number as 2 digits
mmm = Month using ShortDayNames (Jan)
mmmm = Month using LongDayNames (January)
d = Day number no-leading 0
dd = Day number as 2 digits
ddd = Day using ShortDayNames (Sun)
dddd = Day using LongDayNames (Sunday)
ddddd = Day in ShortDateFormat
dddddd = Day in LongDateFormat
c = Use ShortDateFormat + LongTimeFormat
h = Hour number no-leading 0
hh = Hour number as 2 digits
n = Minute number no-leading 0
nn = Minute number as 2 digits
s = Second number no-leading 0
ss = Second number as 2 digits
z = Milli-sec number no-leading 0s
zzz = Milli-sec number as 3 digits
t = Use ShortTimeFormat
tt = Use LongTimeFormat
am/pm = Use after h : gives 12 hours + am/pm
a/p = Use after h : gives 12 hours + a/p
ampm = As a/p but TimeAMString,TimePMString
/ = Substituted by DateSeparator value
: = Substituted by TimeSeparator value

Important : if you want to see characters such as dd in the formatted output, placing them in » marks will stop them being interpreted as date or time elements.

In addition to this formatting, various of the above options are affected by the following variables, withe their default values :

Обратная функция FormatDateTime — delphi

Я ищу функцию для YYYYMDD любой строки ( YYYYMDD , YY/MM/DD , YYMMDD . ), созданной функцией FormatDateTime, к дате и времени.

У меня есть строковая дата в формате YYYYMMDD созданная FormatDateTime

Теперь, как я могу снова конвертировать mydatestr в DateTime ?

не поддерживает передачу строки с форматом для преобразования.

Я смотрю что-то вроде этого

    2 8
  • 7 окт 2020 2020-10-07 17:33:40
  • Salvador

8 ответов

Обычно я просто вставлял символы, необходимые для работы StrToDate.

  • 7 окт 2020 2020-10-07 17:33:42
  • Marcus Adams
  • 7 окт 2020 2020-10-07 17:33:42
  • Job Espejel

Я знаю, что уже слишком поздно, но ради интереса, с Delphi XE6 и далее вы можете делать следующее

ДТ теперь будет 2020/04/08

  • 7 окт 2020 2020-10-07 17:33:42
  • Fero

Вы проверяли StrToDate и StrToDateTime?

  • 7 окт 2020 2020-10-07 17:33:42
  • Liz Albin

Без использования внешней библиотеки вы можете сделать что-то вроде:

а затем используйте его как:

Я havent скомпилировал это, но идея простая.

  • 7 окт 2020 2020-10-07 17:33:41
  • Tuncay Göncüoğlu

Вы можете использовать StrToDateFmt функцию JvJCLUtils, принадлежащую JEDI Библиотека кода

  • 7 окт 2020 2020-10-07 17:33:41
  • STB Land

Мне понравился ответ Тункай, но с ним было несколько проблем. Я бы оставил комментарий, но у меня недостаточно очков репутации.

Итак, здесь скорректированная версия ответа Tuncay (исправление «TFormatSetting» отсутствует «s» и задание разделителя дат формата):

Идентичный ответ Tuncay, AnyStringToDate можно использовать следующим образом:

FormatDateTime — Функция Delphi

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

Примечание. Следует иметь в виду, что при записи года двумя последними цифрами фактический год зависит от текущего года и глобальной переменной заданной в Delphi — TwoDigitYearCenturyWindow. По умолчанию эта переменная имеет значение, равное 50, что означает, что в конце этого столетия и начале следующего задаваемые двумя цифрами годы будут относиться к XX в., если число несколько больше 50, и к XXI в., если число несколько меньше 50.

В модуле SysUtils определен ряд стандартных функции работы с параметрами типа даты-времени.

  • Time — текущее время. Функция возвращает текущее значение времени в формате TTime.
  • Date — текущая дата. Функция возвращает текущее значение даты в формате TDate.
  • Now — текущая дата и время. Функция возвращает текущее значение даты и времени в формате TDateTime.
  • DateTimeToStr (DateTime) — символьное представление даты и времени. Функция формирует для параметра DateTime типа TDateTime символьное представление даты и времени с учетом региональной установки Windows и возвращает полученную строку в качестве результата своей работы.
  • DateTimeToString (Result, Format, DateTime) — сформатированное символьное представление даты и времени. Процедура формирует символьное представление параметра DateTime типа TDateTime с учетом формата, заданного строкой Format, и помещает результат в строку Result.
  • DateToStr (Date) — символьное представление даты. Функция формирует для параметра Date типа TDateTime или TDate символьное представление даты с учетом региональной установки Windows и возвращает полученную строку в качестве результата своей работы.
  • DayOfWeek (Date) — день недели. Функция возвращает день недели заданной даты Date типа TDateTime или TDate в виде числа от 1 до 7, причем нумерация начинается с воскресенья.
  • TimeToStr (Time) — символьное представление времени. Функция формирует для параметра Time типа TDateTime или TTime символьное представление времени с учетом региональной установки Windows и возвращает полученную строку в качестве результата своей работы.
  • DecodeDate (Date, Year, Month, Day) — выделение в дате года, месяца, дня. Процедура выделяет из параметра Date типа TDateTime или TDate год, месяц, день и помещает их соответственно в параметры Year, Month и Day типа Word.
  • DecodeTime (Date, Hour, Min, Sec, MSec) — выделение во времени часа, минуты, секунды и числа миллисекунд. Процедура выделяет из параметра Date типа TDateTime или TTime час, минуту, секунду и число миллисекунд и помещает их соответственно в параметры Hour, Min, Sec и MSec типа 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.

Тепеть разберем некоторые функции на примерах.

DateTimeToString

DateTimeToStr

DateToStr

TimeToStr

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

Обновлять информацию о времени будем, используя таймер, и сделаем возможность запуска/остановки часов. Запускать и останавливать таймер будем следующей процедурой.

Таймер, через определенные интервалы времени, будет получать информацию о дате и времени, выводить ее, и вызывать процедуру рисования аналоговых часов.

А вот и сама процедура рисования аналоговых часов.

Из примера видно, что сделать часы, в том числе и аналоговые, не представляет из себя ничего сложного. Я думаю, не возникнет больших проблем при разборе данного примера.

delphi FormatDateTime

FormatDateTime
Function
Rich formatting of a TDateTime variable into a string SysUtils unit
1 function FormatDateTime (const Formatting : string; DateTime : TDateTime) : string;
2 function FormatDateTime (const Formatting : string; DateTime : TDateTime; const FormatSettings : TFormatSettings) : string;
Description
The FormatDateTime function provides rich formatting of a TDateTime value DateTime into a string. Formatting is defined by the Formatting string.

The Formatting string can comprise a mix of ordinary characters (that are passed unchanged to the result string), and data formatting characters. This formatting is best explained by the example code.

The following (non-Asian) formatting character strings can be used in the Formatting string:

y = Year last 2 digits
yy = Year last 2 digits
yyyy = Year as 4 digits
m = Month number no-leading 0
mm = Month number as 2 digits
mmm = Month using ShortDayNames (Jan)
mmmm = Month using LongDayNames (January)
d = Day number no-leading 0
dd = Day number as 2 digits
ddd = Day using ShortDayNames (Sun)
dddd = Day using LongDayNames (Sunday)
ddddd = Day in ShortDateFormat
dddddd = Day in LongDateFormat
c = Use ShortDateFormat + LongTimeFormat
h = Hour number no-leading 0
hh = Hour number as 2 digits
n = Minute number no-leading 0
nn = Minute number as 2 digits
s = Second number no-leading 0
ss = Second number as 2 digits
z = Milli-sec number no-leading 0s
zzz = Milli-sec number as 3 digits
t = Use ShortTimeFormat
tt = Use LongTimeFormat
am/pm = Use after h : gives 12 hours + am/pm
a/p = Use after h : gives 12 hours + a/p
ampm = As a/p but TimeAMString,TimePMString
/ = Substituted by DateSeparator value
: = Substituted by TimeSeparator value

Important : if you want to see characters such as dd in the formatted output, placing them in » marks will stop them being interpreted as date or time elements.

In addition to this formatting, various of the above options are affected by the following variables, withe their default values :

DateSeparator = /
TimeSeparator = :
ShortDateFormat = dd/mm/yyyy
LongDateFormat = dd mmm yyyy
TimeAMString = AM
TimePMString = PM
ShortTimeFormat = hh:mm
LongTimeFormat = hh:mm:ss
ShortMonthNames = Jan Feb .
LongMonthNames = January, February .
ShortDayNames = Sun, Mon .
LongDayNames = Sunday, Monday .
TwoDigitYearCenturyWindow = 50

Version 2 of this function is for use within threads. You furnish the FormatSettings record before invoking the call. It takes a local copy of global formatting variables that make the routine thread safe.

Related commands
DateSeparator The character used to separate display date fields
DateTimeToStr Converts TDateTime date and time values to a string
DateTimeToString Rich formatting of a TDateTime variable into a string
LongDateFormat Long version of the date to string format
LongDayNames An array of days of the week names, starting 1 = Sunday
LongMonthNames An array of days of the month names, starting 1 = January
LongTimeFormat Long version of the time to string format
ShortDateFormat Compact version of the date to string format
ShortDayNames An array of days of the week names, starting 1 = Sunday
ShortMonthNames An array of days of the month names, starting 1 = Jan
ShortTimeFormat Short version of the time to string format
StrToDateTime Converts a date+time string into a TDateTime value
TimeAMString Determines AM value in DateTimeToString procedure
TimePMString Determines PM value in DateTimeToString procedure
TimeSeparator The character used to separate display time fields
TwoDigitYearCenturyWindow Sets the century threshold for 2 digit year string conversions
Example code : Showing all of the date field formatting data types
var
myDate : TDateTime;

begin

// Set up our TDateTime variable with a full date and time :
// 5th of June 2000 at 01:02:03.004 (.004 milli-seconds)
myDate := EncodeDateTime(2000, 6, 5, 1, 2, 3, 4);

// Date only — numeric values with no leading zeroes (except year)
ShowMessage(‘ d/m/y = ‘+
FormatDateTime (‘d/m/y’, myDate));

// Date only — numeric values with leading zeroes
ShowMessage(‘ dd/mm/yy = ‘+
FormatDateTime (‘dd/mm/yy’, myDate));

// Use short names for the day, month, and add freeform text (‘of’)
ShowMessage(‘ ddd d of mmm yyyy = ‘+
FormatDateTime (‘ddd d of mmm yyyy’, myDate));

// Use long names for the day and month
ShowMessage(‘dddd d of mmmm yyyy = ‘+
FormatDateTime (‘dddd d of mmmm yyyy’, myDate));

// Use the ShortDateFormat settings only
ShowMessage(‘ ddddd = ‘+
FormatDateTime (‘ddddd’, myDate));

// Use the LongDateFormat settings only
ShowMessage(‘ dddddd = ‘+
FormatDateTime (‘dddddd’, myDate));

// Use the ShortDateFormat + LongTimeFormat settings
ShowMessage(‘ c = ‘+
FormatDateTime (‘c’, myDate));
end;

Show full unit code
d/m/y = 5/6/00
dd/mm/yy = 05/06/00
ddd d of mmm yyyy = Mon 5 of Jun 2000
dddd d of mmmm yyyy = Monday 5 of June 2000
ddddd = 05/06/2000
dddddd = 05 June 2000
c = 05/06/2000 01:02:03
Example code : Showing all of the time field formatting data types
var
myDate : TDateTime;

begin

// Set up our TDateTime variable with a full date and time :
// 5th of June 2000 at 01:02:03.004 (.004 milli-seconds)
myDate := EncodeDateTime(2000, 6, 5, 1, 2, 3, 4);

// Time only — numeric values with no leading zeroes
ShowMessage(‘ h:n:s.z = ‘+ FormatDateTime (‘h:n:s.z’, myDate));

// Time only — numeric values with leading zeroes
ShowMessage(‘hh:nn:ss.zzz = ‘+ FormatDateTime (‘hh:nn:ss.zzz’, myDate));

// Use the ShortTimeFormat settings only
ShowMessage(‘ t = ‘+ FormatDateTime (‘t’, myDate));

// Use the LongTimeFormat settings only
ShowMessage(‘ tt = ‘+ FormatDateTime (‘tt’, myDate));

// Use the ShortDateFormat + LongTimeFormat settings
ShowMessage(‘ c = ‘+ FormatDateTime (‘c’, myDate));
end;

Show full unit code
h:m:s.z = 1:2:3.4
hh:mm:ss.zzz = 01:02:03.004
t = 01:02
tt = 01:02:03
c = 05/06/2000 01:02:03
Example code : Showing the effect of local date format settings
var
myDate : TDateTime;

begin

// Set up our TDateTime variable with a full date and time :
// 5th of June 2049 at 01:02:03.004 (.004 milli-seconds)
//
// Note that 49 is treated as 2049 as follows :
// TwoDigitYearCenturyWindow => 50
// Current year => 2008 (at time of writing)
// Subtract TwoDigitYearCenturyWindow => 1958
// 2 digit year to be converted => 49
// Compare with the last 2 digits of 1958 => Less
// So the year is in the next century => 2049
// (58 would be converted to 1958)

myDate := StrToDateTime(’05/06/49 01:02:03.004′);

// Demonstrate default locale settings

// Use the DateSeparator and TimeSeparator values
ShowMessage(‘dd/mm/yy hh:nn:ss = ‘+
FormatDateTime (‘dd/mm/yy hh:nn:ss’, myDate));

// Use ShortMonthNames
ShowMessage(‘ mmm = ‘+ FormatDateTime (‘mmm’, myDate));

// Use LongMonthNames
ShowMessage(‘ mmmm = ‘+ FormatDateTime (‘mmmm’, myDate));

// Use ShortDayNames
ShowMessage(‘ ddd = ‘+ FormatDateTime (‘ddd’, myDate));

// Use LongDayNames
ShowMessage(‘ dddd = ‘+ FormatDateTime (‘dddd’, myDate));

// Use the ShortDateFormat string
ShowMessage(‘ ddddd = ‘+ FormatDateTime (‘ddddd’, myDate));

// Use the LongDateFormat string
ShowMessage(‘ dddddd = ‘+ FormatDateTime (‘dddddd’, myDate));

// Use the TimeAmString
ShowMessage(‘ hhampm = ‘+ FormatDateTime (‘hhampm’, myDate));

// Use the ShortTimeFormat string
ShowMessage(‘ t = ‘+ FormatDateTime (‘t’, myDate));

// Use the LongTimeFormat string
ShowMessage(‘ tt = ‘+ FormatDateTime (‘tt’, myDate));

// Use the TwoDigitCenturyWindow
ShowMessage(‘ dd/mm/yyyy = ‘+
FormatDateTime (‘dd/mm/yyyy’, myDate));

ShowMessage(»);

// Now change the defaults
DateSeparator := ‘-‘;
TimeSeparator := ‘_’;
ShortDateFormat := ‘dd/mmm/yy’;
LongDateFormat := ‘dddd dd of mmmm of yyyy’;
TimeAMString := ‘morning’;
TimePMString := ‘afternoon’;
ShortTimeFormat := ‘hh:nn:ss’;
LongTimeFormat := ‘hh : nn : ss . zzz’;
ShortMonthNames[6] := ‘JUN’;
LongMonthNames[6] := ‘JUNE’;
ShortDayNames[1] := ‘SUN’;
LongDayNames[1] := ‘SUNDAY’;
TwoDigitYearCenturyWindow := 75; // This means 49 is treated as 1949

// Set up our TDateTime variable with the same value as before
// except that we must use the new date and time separators
// The TwoDigitYearCenturyWindow variable only takes effect here
myDate := StrToDateTime(’09-02-49 01_02_03.004′);

// Use the DateSeparator and TimeSeparator values
ShowMessage(‘dd/mm/yy hh:nn:ss = ‘+
FormatDateTime (‘dd/mm/yy hh:nn:ss’, myDate));

// Use ShortMonthNames
ShowMessage(‘ mmm = ‘+ FormatDateTime (‘mmm’, myDate));

// Use LongMonthNames
ShowMessage(‘ mmmm = ‘+ FormatDateTime (‘mmmm’, myDate));

// Use ShortDayNames
ShowMessage(‘ ddd = ‘+ FormatDateTime (‘ddd’, myDate));

// Use LongDayNames
ShowMessage(‘ dddd = ‘+ FormatDateTime (‘dddd’, myDate));

// Use the ShortDateFormat string
ShowMessage(‘ ddddd = ‘+ FormatDateTime (‘ddddd’, myDate));

// Use the LongDateFormat string
ShowMessage(‘ dddddd = ‘+ FormatDateTime (‘dddddd’, myDate));

// Use the TimeAmString
ShowMessage(‘ hhampm = ‘+ FormatDateTime (‘hhampm’, myDate));

// Use the ShortTimeFormat string
ShowMessage(‘ t = ‘+ FormatDateTime (‘t’, myDate));

// Use the LongTimeFormat string
ShowMessage(‘ tt = ‘+ FormatDateTime (‘tt’, myDate));

// Use the TwoDigitCenturyWindow
ShowMessage(‘ dd/mm/yyyy = ‘+
FormatDateTime (‘dd/mm/yyyy’, myDate));
end;

Show full unit code
dd/mm/yy hh:mm:ss = 05/06/49 01:02:03
mmm = Jun
mmmm = June
ddd = Sat
dddd = Saturday
ddddd = 05/06/2049
dddddd = 05 June 2049
hhampm = 01AM
t = 01:02
tt = 01:02:03
dd/mm/yyyy = 05/06/2049

dd/mm/yy hh:nn:ss = 05-06-49 01_02_03
mmm = JUN
mmmm = JUNE
ddd = SUN
dddd = SUNDAY
ddddd = 05-JUN-49
dddddd = SUNDAY 05 of JUNE of 1949
hhampm = 01morning
t = 01_02_03
tt = 01 _ 02 _ 03 . 004
dd/mm/yyyy = 05-06-1949

StrToDateTime Converts a date+time string into a TDateTime value
1 function StrToDateTime ( const DateTime : string ) : TDateTime;
2 function StrToDateTime ( const DateTime : string; const FormatSettings : TFormatSettings ) : TDateTime;

String DateTime -> TDateTime myDateTime
——————————————
21/06/09 17 -> 21/06/09 17:00:00
21/06/09 16:48:23 -> 21/06/09 16:48:23

FormatDateTime — Функция Delphi

уЕТЧЕТ РПДДЕТЦЙЧБЕФУС
ЛБЖЕДТПК ЙОЖПТНБФЙЛЙ Й ЧЩЮЙУМЙФЕМШОПК ФЕИОЙЛЙ зТзх
ФЕМ. +375-(0)152-445-101
E-mail : kadan@grsu.grodno.by

уРТБЧПЮОЙЛ РП ЖХОЛГЙСН Delphi. тБВПФБ У ДБФБНЙ Й ЧТЕНЕОЕН

ч Delphi ДМС ИТБОЕОЙС ДБФ Щ Й (ЙМЙ) ЧТЕНЕОЙ РТЕДХУНПФТЕО ЖПТНБФ TDateTime, РТЕДУФБЧМСАЭЙК УПВПК, ОБ УБНПН ДЕМЕ, ПВЩЮОПЕ ЮЙУМП У РМБЧБАЭЕК ФПЮЛПК.

рТЙ ЬФПН ДБФБ РТЕДУФБЧМСЕФУС ГЕМПК ЮБУФША ЮЙУМБ, Б ЧТЕНС ? ДТПВОПК. рТЕЙНХЭЕУФЧП ЬФПЗП РПДИПДБ Ч ФПН, ЮФП ФЕРЕТШ ДБФЩ Й ЧТЕНЕОБ НПЦОП ЛПТТЕЛФОП УЛМБДЩЧБФШ Й ЧЩЮЙФБФШ, ОБРТЙНЕТ:

Илон Маск рекомендует:  Что такое код register_shutdown_function
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL