Как сделать время в delphi 7

Как сделать

Дата и время в Delphi

Зачем иметь учебник только по датам и времени? Потому что это удивительно сложный и богатый предмет. И очень полезно, тем более что Delphi предоставляет обширную поддержку вычислений, преобразований и имен.

Тип данных TDateTime

Обработка даты и времени зависит от переменной TDateTime. Он используется для хранения комбинации даты и времени. Он также используется для хранения только значений даты или времени — значение времени и даты игнорируется соответственно. TDateTime определяется в системном блоке. Константы даты и подпрограммы определяются в единицах SysUtils и DateUtils.

Давайте рассмотрим несколько простых примеров присвоения значения переменной TDateTime:

var
data1, data2, data3 : TDateTime; // TDateTime variables
begin
data1 := Вчера; // Устанавливается начало вчерашнего дня
data2 := Сегодня; // Устанавливается текущая дата
data3 := Завтра; // Устанавливается начало завтрашнего
data4 := Прямо сейчас; // Устанавливается текущая дата и время
end;

data1 устанавливается на что-то вроде 04/01/2021 00:00:00
data2 устанавливается на что-то вроде 05/01/2021 00:00:00
data3 устанавливается на что-то вроде 06/01/2021 00:00:00
data4 устанавливается на что-то вроде 05/01/2021 19:33:15

Примечание: начало дня часто называют полночью в документации Delphi, но это вводит в заблуждение, так как это будет полночь не того дня.

Некоторые именованные значения даты

Delphi предоставляет некоторые полезные названия дней и месяцев, избавляя вас от скуки определения их в вашем собственном коде. Вот они:

Короткие и длинные названия месяцев

Обратите внимание, что эти массивы имен месяцев начинаются с index = 1.

var
month : Integer;
begin
for month := 1 to 12 do // Display the short and long month names
begin
ShowMessage(ShortMonthNames[month]);
ShowMessage(LongMonthNames[month]);
end;
end;

Процедура ShowMessage отображает следующую информацию:

January
February
March
April
May
June
July
August
September
October
November
December

Короткие и длинные названия дней

Важно отметить, что эти дневные массивы начинаются с индекса 1 = воскресенье. Это не очень хороший стандарт (он не соответствует стандарту ISO 8601), поэтому будьте осторожны при использовании с процедурами, совместимыми с ISO 8601, такими как DayOfTheWeek.

var
day : Integer;
begin
for day := 1 to 12 do // Отобразить короткие и длинные названия
begin
ShowMessage(Короткие названия [day]);
ShowMessage(Длинные названия[day]);
end;
end;

Процедура ShowMessage отображает следующую информацию:

Mon
Monday
Tue
Tuesday
Wed
Wednesday
Thu
Thursday
Fri
Friday
Sat
Saturday
Sun
Sunday

Расчеты даты и времени

Самое большое преимущество TDateTime — это диапазон вычислений, которые Delphi может сделать для вас. Их можно найти на домашней странице Delphi Basics в разделе даты и время/расчеты.

Источник

Типы, функции и процедуры Delphi для работы с датой и временем.


Содержание:


Функции и процедуры Delphi для работы с датой и временем.


Тип TDateTime.


Тип TTimeStamp.


Тип TSQLTimeStamp.


Функции и процедуры Delphi для работы с датой и временем.

Значения символических констант для обозначения дней недели в соответствии с ISO 8601. Используйте эти константы для работы с функциями, работающими в соответствии со стандартом ISO 8601 (функции из модуля DateUtils).

Внимание: Не используйте эти константы с функцией DayOfWeek, которая трактует Воскресение (Sunday) как первый день недели.

Читайте также:  Аквариумный грунтоочиститель своими руками

DayOf функция
DateUtils Возвращает день месяца из значения TDateTime. Возвращаемое функцией значение находится в промежутке между 1 и 31. DayOfTheMonth функция
DateUtils Возвращает день месяца из значения TDateTime. Возвращаемое функцией значение находится в промежутке между 1 и 31. DayOfTheWeek функция
DateUtils

Внимание: Значения DayOfTheWeek соответствуют ISO 8601 (где Понедельник (Monday) является первым днем недели). Если хотите чтобы первым днем недели считалось Воскресение (Sunday) используйте функцию DayOfWeek вместо функции DayOfTheWeek.

Совет: Чтобы сделать возвращаемые значения более читабельными, используйте константы Day of week.

DayOfTheYear функция
DateUtils Возвращает количество дней между значением, указаным в TDateTime и 31 Декабря предыдущего года. DayOfWeek функция
SysUtils

Внимание: Значения DayOfWeek не соответствуют ISO 8601 (где Понедельник (Monday) является первым днем недели). Если хотите чтобы первым днем недели считался Понедельник (Monday) используйте функцию DayOfTheWeek вместо функции DayOfWeek.

Содержание

Тип TDateTime.

Ниже приведены несколько примеров значения TDateTime и соответсвующие им дата и время:

12/30/1899 12:00 am
2.75 1/1/1900 6:00 pm
-1.25 12/29/1899 6:00 am
35065 1/1/1996 12:00 am

Чтобы найти количество дней, включая дробную часть, между двумя датами, просто вычтите два значения, если только одно из них не является отрицательным. Аналогично, если значение TDateTime не отрицательное, то, чтобы увеличить значение даты и времени на определенное кличество дней, включая дробную часть, достаточно прибавить количество дней, включая дробную часть, к значению TDateTime.

Когда обрабатываются отрицательные значения TDateTimes, то вычисление дробной части производится отдельно. Дробная часть отражает часть 24-часового дня не зависимо от знака значения TDateTime. Например, 6:00 am on 12/29/1899 это –1.25, а неt –1 + 0.25, что составило бы –0.75. Значений TDateTime между –1 и 0 не существует. Cовет: В модулях SysUtils и DateUtils для работы с датой и временем имеется большое количество процедур и функций на все случаи жизни. Не заморачивайтесь с обственными вычислениями, не изобретайте велосипед, а пользуйтесь уже готовыми наработками разработчиков Delphi. (См. Функции и процедуры Delphi для работы с датой и временем.) Оно надежнее.

Примечание: В Delphi 1 за начало отсчета принят год 1, т.е. для перевода даты Delphi 1 в дату последующих версий Delphi надо вычесть из даты число 693594.

Содержание

Тип TTimeStamp.

TTimeStamp представляет значения дата и время.

Используйте TTimeStamp если требуется повышеная точность представления значения времени в знчениях дата/время. Если нет необходимости сохранять значение времени с точностью до милисекунд, используйте более компактное TDateTime. Если необходима еще большая точность, то используйте TSQLTimeStamp (но НЕ назначайте его типом Variant).

Поле Time field показывает количество милисекунд, прошедших с полуночи.

Поле Data показывает число календарных дней от начала календаря (число дней с 1/1/0001 плюс один).

Содержание

Тип TSQLTimeStamp.

TSQLTimeStamp представляет значения даты и времени с очень высокой точностью.

Используя функцию VarSQLTimeStampCreate, Вы можете создать тип Variant который представляет значение TSQLTimeStamp. Фактически, простейший путь манипулирования значениями SQLTimeStamp это создать подобный Variant и использовать встроеные операторы, обеспечивающие работу с Variant.

Источник

Delphi: как измерить точное время выполнения операции?

Точное время измерения выполнения операции в Delphi может пригодится во многих случаях, начиная от самого простого – показать пользователю время, затраченное на выполнение длительной операции (здесь, кстати, высокая точность нужна редко) и, заканчивая, ситуациями, когда в целях оптимизации программы нам необходимо выявить в программе наиболее “узкие” места в которых программа “застревает” на длительный промежуток времени. В основном, последняя ситуация характерна при разработке программ, использующих и обрабатывающих большие массивы данных, когда скорость выполнения операций выходит, если не на первое, то на одно из первых мест в требованиях к приложению.
Есть несколько способов узнать время выполнения операций в Delphi и все эти способы, в принципе, рассмотрены как в Сети, так и моем блоге. Поэтому представленная ниже статья – это лишь объединение всех возможных способов измерения времени в Delphi и опытный Delphi-программист здесь врядли встретит что-то новое для себя.

Читайте также:  Как сделать водяную зажигалку своими руками

Способ №1 – самый простой. Используем функцию Now()

Самый простейший и наименее точный способ измерить время, затраченное на выполнение какой-либо операции в Delphi – воспользоваться функцией Now() из модуля System.SysUtils.

Исходный код может выглядеть, например, так:

Вполне вероятно, что у вас может возникнуть резонный вопрос: почему я использовал в примере SecondsBetween(), а не, например, MilliSecondsBetween() для большей точности? Сделал я это, опираясь исключительно, на описание функции Now() в официальной справке по Delphi, которая гласит следующее: “Несмотря на то, что в TDateTime могут передаваться миллисекунды, Now() имеет точность до ближайшей секунды“. То есть, если использовать Now(), то определять интервал времени с точностью до миллисекунд – не имеет смысла.

Способ №2 – используем Windows API. Функция GetTickCount().

Функция GetTickCount() не имеет параметров и возвращает количество миллисекунд, прошедших с момента запуска системы. Судя по официальной справке Microsoft, р азрешение функции GetTickCount() ограничено разрешением системного таймера, которое обычно находится в диапазоне от 10 до 16 миллисекунд. При этом, счётчик миллисекунд будет обнулен, если система запущена более 49,7 дней.
В принципе, пример использования этой функции похож на предыдущий:

Так, используя функцию GetTickCount() мы можем засечь время выполнения операции в Delphi с точностью до миллисекунды. Если и такая точность Вам не подходит и необходимо измерить интервал времени ещё точнее, то следующий способ – для вас.

Способ №3 – продолжаем использовать Windows API. Функции QueryPerformanceCounter и QueryPerformanceFrequency

Об этих функциях я рассказывал давным-давно, но, повторюсь ещё раз.

QueryPerformanceCounter — извлекает текущее значение счетчика производительности, которое представляет собой метку времени с высоким разрешением ( Способ №4 – используем возможности Delphi. Модуль System.Diagnostics

Об этом модуле я также упоминал вскользь в некоторых статьях блога, например, здесь. Модуль этот появился в Delphi уже достаточно давно (могу ошибаться, но, по-моему с Delphi XE-XE2). В модуле представлена всего одна запись (record) – TStopwatch, которая является ни чем иным, как удобной “обёрткой” для использования таймеров высокого разрешения из примера выше. Судя по достаточно скромной справке, TStopwatch использует функциональные возможности, зависящие от операционной системы, для получения доступа к таймерам с высоким разрешением, если они доступны. Если таймеры с высоким разрешением в ОС недоступны, то используются обычные таймеры.

Несмотря на то, что TStopwatch – это запись, для корректного использования всё же необходимо вызывать метод Create или StartNew.

Источник

Как сделать время в delphi 7

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

Компонент Timer имеет всего четыре свойства и одно событие, и работать с компонентом Delphi Timer очень просто.

СВОЙСТВО НАЗНАЧЕНИЕ
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 миллисекунд. В качестве примера приведу простую программу, отображающую текущее время.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption:=TimeToStr(Now);
end;

Источник

Работа с датами и временем

Как узнать номер недели данного дня в году?

function WeekOfYear(ADate : TDateTime) : word;

DecodeDate(ADate, year, month, day);

procedure TForm1.Button1Click(Sender: TObject);

function WeekNum( const ADate: TDateTime): word;

function WeekOfYear(Dat: TDateTime): Word;

// Интерпретация номеров дней:

// ISO: 1 = Понедельник, 7 = Воскресенье

// Delphi SysUtils: 1 = Воскресенье, 7 = Суббота

day := SysUtils.DayOfWeek(Dat)- 1 ;

DecodeDate(Dat, Year, Month, Day);

Result := 1 + (DateDiff div 7 );

Взято из http://forum.sources

Получить номер недели по дате

FirstWeekDay: Integer = 2 ;

2 : Montag (nach DIN 1355) >

FirstWeekDate: Integer = 4 ;

4 : Erste-4 Tage-Woche (nach DIN 1355)

7 : Erste volle Woche >

function WeekToDate(AWeek, AYear: Integer): TDateTime;

procedure DateToWeek(ADate: TDateTime; var AWeek, AYear: Word);

DecodeDate(ADate, AYear, Month, Day);

procedure TForm1.Button1Click(Sender: TObject);

procedure TForm1.Button2Click(Sender: TObject);

DateToWeek(now, week, year);

Взято с сайта: http://www.swissdelphicenter

Как определить день недели?

procedure TForm1.Button1Click(Sender: TObject);

Функции DayOfTheWeek и DayOfWeek (см. справку по Дельфи)

Автор: Hans Pieters

Если Вы создаёте приложение, в котором пользователь вводит значения времени, то стандартные вычисления не подойдут. Проблема в том, что нужно сделать так, чтобы выражение 1.20 + 1.70 было равно НЕ 2.90 а 3.10.

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

function sumhhmm(a, b: double): double;

h1 := (INT(A) + INT(B)) * 60 + (frac(a) + frac(b)) * 100 ;

function hhmm2hhdd( const hhmm: double): double;

function hhdd2hhmm( const hhdd: double): double;

// sumtime(1.20,- 0.50) => 0.30

// hhmm2hhdd(1.30) => 1.5 (1h.30m = 1.5h)

// hhdd2hhmm(1.50) => 1.30 (1.5h = 1h30m)

Взято из http://forum.sources

Дни недели

function checkdate(date: string ): boolean;

function Date2julian(date: string ): longint;

function Julian2date(julian: longint): string ;

function DayOfTheWeek(date: string ): string ;

function idag: string ;

function idag(): string ;

другими функциями данного молуля.>

Year, Month, Day: Word;

DecodeDate(Now, Year, Month, Day);

result := IntToStr(year) + IntToStr(Month) + IntToStr(day);

function Date2julian(date: string ): longint;

Если у вас другой формат,

в первую очередь преобразуйте его.>

month, day, year: integer;

ta := 146097 * (year div 100 ) div 4 ;

tb := 1461 * (year mod 100 ) div 4 ;

tc := ( 153 * month + 2 ) div 5 + day + 1721119 ;

result := ta + tb + tc

function mdy2date(month, day, year: integer): string ;

y := ‘000’ + inttostr(year);

m := ‘0’ + inttostr(month);

function Julian2date(julian: longint): string ;

month, day, year: integer;

y := (x div 146097 ) * 100 ;

d := (x mod 146097 ) div 4 ;

d := (x mod 1461 ) div 4 + 1 ;

d := (x mod 153 ) div 5 + 1 ;

result := mdy2date(month, day, year);

function checkdate(date: string ): boolean;

Это позволит получить необходимое значение.>

Это всегда будет правильной датой. Для проверки делаем обратное преобразование.

Результат проверки передаем как выходной параметр функции.>

if date = test then

function DayOfTheWeek(date: string ): string ;

и возвращаем день недели.>

julian := (Date2julian(date)) mod 7 ;

0 : result := ‘Понедельник’ ;

1 : result := ‘Вторник’ ;

3 : result := ‘Четверг’ ;

4 : result := ‘Пятница’ ;

5 : result := ‘Суббота’ ;

6 : result := ‘Воскресенье’ ;

Тем не менее, начиная со второй версии, Delphi содержат в своем арсенале замечательную функцию DayOfWeek, возвращающую целочисленный результат в диапазоне от 1 до 7. Вот пример кода, присланный Андреем Ивановым:

function TForm1.DayOfWeekRus(S: TDateTime): string ;

Источник

Оцените статью
Как сделать своими руками
Добавить комментарий
Adblock
detector