EncodeTime — Функция Delphi


Процедуры и функции работы с датой и временем

Function Date: TDateTime;

Возвращает текущую дату.

Function DateTimeToStr(DateTime: TDateTime): String;

Преобразовывает параметр типа TDateTime, содержащий дату и время, в строку. Если параметр DateTime не содержит значения даты, дата устанавливается в 00/00/00. Если параметр DateTime не содержит значения времени, время устанавливается в 00:00:00.

Function DateToStr(Date: TDateTime): String;

Преобразовывает параметр типа TDateTime, содержащий дату, в строку.

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

Function DayOfWeek(Date: TDateTime): Integer;

Возвращает день недели определенной даты как целое число между 1 и 7. Воскресенье — первый день недели, и суббота — седьмой.

Procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word);

Извлекает дату из формата TDateTime и помещает год, месяц и день соответственно в переменные Year, Month и Day.

Procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);

Извлекает время из формата TDateTime и помещает часы, минуты, секунды, и миллисекунды соответственно в переменные Hour, Min, Sec и MSec.

Function EncodeDate(Year, Moth, Day: Word): TDateTime;

Возвращает дату в формате TDateTime, полученную из значений параметров Year, Month и Day.

Year должен быть между 1 и 9999.

Допустимые значения Month — от 1 до 12.

Допустимые значения Day — от 1 до 28, 29, 30, или 31, в зависимости от значения Month. Например, возможные значения Day в течение второго месяца (февраля) — от 1 до 28, или от 1 до 29, в зависимости от того, определяет или нет значение Year високосный год.

Если значения находятся вне диапазона, возникает исключительная ситуация EConvertError. Возникающее в результате значение — единица плюс число дней между 30/12/1899 и данной датой.

Function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;

Возвращает время в формате TDateTime, полученное из значений параметров Hour, Min, Sec и MSec.

Если значение типизированной константы Time24Hour ложно (False), значения Hour лежат в пределах от 0 до 12, если истинно (True) — от 0 до 23.

Допустимые значения Min и Sec — от 0 до 59. Допустимые значения MSec — от 0 до 999.

Если значения находятся вне диапазона, возникает исключительная ситуация EConvertError.

Function Now: TDateTime;

Возвращает текущую дату и время в формате TDateTime (дата + время).

Function StrToDate(const S: String): TDateTime;

Преобразовывает строковое представление даты в формат TDateTime. Дата в параметре S должна быть записана по правилам Windows, т.е. должна состоять из двух или трех чисел, отделяемых символом, опреде-ленным в глобальной переменной DateSeparator. Порядок следования месяца, дня и года определен в глобальной переменной ShortDateFormat. Возможные комбинации — m/d/y, d/m/y, и y/m/d.

Если строка содержит только два числа, это интерпретируется как дата (m/d или d/m) в текущем году. Значения Year между 0 и 99 означают год в текущем столетии.

Если строка содержит дату в неверном формате, возбуждается исключительная ситуация EConvertError.

Function StrToTime(Const S: String): TDateTime;

Преобразовывает строковое представление времени в формат TDateTime.

Строка должна состоять из двух или трех чисел, отделяемых символом, определенным в глобальной переменной TimeSeparator. Числа представляют собой часы, минуты, и (необязательно) секунды, в соответствующем порядке.

Если строка содержит время в неверном формате, возбуждается исключительная ситуация EConvertError.

Function Time: TDateTime;

Возвращает текущее время.

Function TimeToStr(Time: TDateTime): String;

Преобразовывает время из формата TDateTime в строковое представление.

Преобразование использует формат, определенный в глобальной переменной LongTimeFormat. Вы можете изменять формат отображения времени, изменяя значения переменных даты и времени (или используя Панель управления Windows).

EncodeTime — Функция Delphi

Описание
Функция преобразовывает значения часов, минут, секунд и миллисекунд, переданных в параметрах Hour, Min, Sec, MSec соответственно, в значение типа TDateTime. Исходные значения должны иметь допустимые величины: Hour — 0.. 23; Min — 0.. 59; Sec — 0.. 59; MSec — 0.. 999. Если значения выходят за пределы заданных диапазонов, то возникает исключение EConvertError.
Функция возвращает значение в диапазоне [0.. 1). Результирующее значение определяет часть дня, прошедшую к указанному времени (например, 0 — полночь, 0.5 — полдень, 0.75 — 18:00 и т.д.).

Илон Маск рекомендует:  Что такое deadlock и как с ним бороться

Пример
var
T: TDateTime;
begin
T:= EncodeTime( 7, 30, 0, 0);
MessageDlg( TimeToStr(T), mtInformation, [mbOk], 0);
end;

encodetime, incmilliseconds в delphi

Я создал кодировку, чтобы установить 20 миллисекунду быстрее, чем система Windows. Я использую encodetime.

aftr я запускаю его, показываю правильное время. но дата идет до 30 дека 1899.. но я хочу текущую сегодняшнюю дату, но со временем быстрее 20 миллисекунд. любая помощь.. пожалуйста.

2 ответа

У вас есть аргументы ReplaceDate назад. Он считывает дату второго параметра и назначает часть даты первого параметра. Часть даты delphi_datetime равна 0, так как работает EncodeTime . Вы принимаете это нулевое значение и назначаете его t_date , но затем продолжаете работать с delphi_datetime .

ReplaceDate аргументы ReplaceDate , и вы увидите, что ваше текущее системное время будет установлено в 8: 45: 00.000 с текущей датой.

Вы могли бы заметить ошибку раньше, если бы не использовали отдельную переменную t_date . Если вы вызвали Date напрямую, ваш код не смог бы скомпилировать:

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

Если вы хотите, чтобы время даты было на 20 миллисекунд больше, чем сейчас, сделайте следующее:

Если вы хотите, чтобы сегодня было дано время 0845, вы пишете:

EncodeTime Routine

Description

(Please provide a description in your own words. It is illegal to use the wording from the Delphi Help.)

Technical Comments

(Known issues / Documentation clarifications / Things to be aware of)

Examples

(Please provide links to articles/source code that show how to use this item.)

See Also

(Please provide links to items specifically related to this item.)

User Comments/Tips

(Please leave your name with your comment.)

Replacement for EncodeTime or DecodeTime in Delphi Prism

In Delphi Win32, you have EncodeTime and DecodeTime functions to manipulate DateTime data or variables. Are there any functions similar to these in DELPHI Prism? If not, How would you do it?

For instance, you wanted to Add two datetime variables (A and B) together, after increasing B by one day.

1 Answer 1

You must use the DateTime type, this class has many constructors which you can use to encode a a datetime.

Example to encode a DateTime

To Decode a DateTime you must use the properties Year, Month, Day, Minute and Second.

Now to modify a Datetime adding days , years or another range you can use the methods AddYears , AddMonths , AddDays and so on.

3 варианта работы с кодировками веб-страниц в Delphi.

Сколько постов написано в блогах, сколько вопросов задано на форумах о кодировках и ещё большее количество подобных вопросов осталось не отвеченными или ответом было что-то наподобие «Поиском пользовались?» или «Сто раз обсуждалось. ». Честно говоря, никогда не понимал таких «ответчиков», ИМХО не хочешь отвечать — лучше жуй и молчи, ответят те, кто захочет.
Понятное дело, что обучать иногда приходится не только с помощью пряника, но и с помощью кнута, но, раз уж такие вопросы всё время всплывают, следовательно они остаются актуальными.
Сегодня я попробую рассказать Вам всё, что мне известно о работе с кодировками в тексте. Вполне возможно, что эта статья поможет Вам при разработке своих проектов в Delphi да и у меня уже пару раз возникало желание немного систематизировать ту информацию. которая накопилась за время существования блога.

1. Delphi и Unicode

Если говорить о работе с Unicode в Delphi, то начать стоит с того, что полноценная поддержка unicode в Delphi стала возможна лишь после выхода Delphi 2009. Такое событие не могло пройти незамеченным, так как благодаря поддержке Unicode и, соответственно, для облегчения работы с кодировками текста в Delphi были реализованы новые возможности, методы, типы данных, о которых написано большое количество статей. На мой взгляд одной из лучших публикаций на эту темя является цикл из трех статей «Delphi и кодировка Unicode» где достаточно чётко и доступно рассказано о нововведениях Delphi 2009 для работы с unicod’ом. Думаю, что нет смысла подробно останавливаться на всех новшествах при наличии ссылки на целых три статьи на эту тему. Остается только упомянуть о том, с чем мы сегодня будем работать для представления веб-страницы в нормальном читаемом виде.
Для первого способа работы с кодировкой мы воспользуемся:

  1. Класс TEncoding, который и дает нам возможность без лишних хлопот работать с кодировками
  2. Тип данных TBytes — массива байтов строк
  3. RawByteString — тип для передачи строковых данных для любой кодовой страницы без каких-либо преобразований последней
Илон Маск рекомендует:  deg в CSS

В одной из статей блога рассматривалась работа с MLang и сегодня, в качестве второго способа, я продемонстрирую Вам пример её применения при работе с кодировками.
Ну и в качестве третьего способа работы с кодировками, воспользуемся «штатными» методами модуля system. Все три варианта работы с кодировками приведут к одному и тому же результату — текст веб-страницы будет читаемым, без «кракозябров» и вопросительных знаков. Какой способ лучше — решать только Вам.

2. Подготовка исходных данных для работы

Прежде, чем начать что-то кодировать и перекодировать, необходимо это «что-то» получить. В нашем случае — текст веб-страницы. Чтобы не залезать слишком глубоко в вопросы, касающиеся новых типов данных будем сохранять все данные из Сети не в строки или TStringList’ы, как мы к этому привыкли, а воспользуемся типом TBytes.
Используя Synapse исходник любой страницы можно получить, например так:

EncodeTime(Hour, Minute, Second[, MilliSecond] : Integer) : Integer
Сформировать значение типа DateTime.

Функция EncodeDate возвращает значение типа DateTime для указанного часа, минуты, секунды и миллисекунды. Дата равна 1-1-0001.

Аргумент Hour содержит час. Он должны быть в пределах от 0 до 23.

Аргумент Minute содержит минуты. Они должны быть в пределах от 0 до 59.

Аргумент Second содержит секунды. Они должны быть в пределах от 0 до 59.

Аргумент MilliSecond содержит миллисекунды. Они должны быть в пределах от 0 до 999. Этот аргумент можно не указывать, тогда миллисекунды будут равны 0.

delphi — encodetime, incmilliseconds в delphi

Я создал кодировку, чтобы установить 20 миллисекунду быстрее, чем система Windows. Я использую encodetime.

aftr я запускаю его, показываю правильное время. но дата идет до 30 дека 1899.. но я хочу текущую сегодняшнюю дату, но со временем быстрее 20 миллисекунд. любая помощь.. пожалуйста.

    2 2
  • 2 май 2020 2020-05-02 16:27:03
  • user1578404

2 ответа

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

Если вы хотите, чтобы время даты было на 20 миллисекунд больше, чем сейчас, сделайте следующее:

Если вы хотите, чтобы сегодня было дано время 0845, вы пишете:

  • 2 май 2020 2020-05-02 16:27:04
  • David Heffernan

У вас есть аргументы ReplaceDate назад. Он считывает дату второго параметра и назначает часть даты первого параметра. Часть даты delphi_datetime равна 0, так как работает EncodeTime . Вы принимаете это нулевое значение и назначаете его t_date , но затем продолжаете работать с delphi_datetime .

ReplaceDate аргументы ReplaceDate , и вы увидите, что ваше текущее системное время будет установлено в 8: 45: 00.000 с текущей датой.

Вы могли бы заметить ошибку раньше, если бы не использовали отдельную переменную t_date . Если вы вызвали Date напрямую, ваш код не смог бы скомпилировать:

Delphi 2006. Справочное пособие: Язык Delphi, классы, функции Win32 и .NET. — Архангельский А.Я.

Удаляет из строки заданную подстроку Библиотеки VCL Win32, VCL .NET Модуль в VCL Win32 System

Пространство имен в .NET Borland.Delphi.System Объявление

procedure Delete(var S: string; Index, Count: Integer) ; Описание

Процедура Delete удаляет из строки S подстроку, начинающуюся с индекса Index и содержащую до Count символов.

Если индекс Index превышает длину, то ничего не удаляется. Если Index + Count превышает число символов S, то удаляется весь конец строки S, начиная с индекса Index. DivMod

Примеры применения процедуры Delete вы можете найти в разд. 5.1.2.1. DivMod

Осуществляет целочисленное деление, возвращая результат и остаток

Библиотеки VCL Win32, VCL .NET

Модуль в VCL Win32 Math

Пространство имен в .NET Borland.Vcl.Math

procedure DivMod(Dividend: Integer; Divisor: Word;

var Result, Remainder: Word);

Процедура DivMod осуществляет целочисленное деление Dividend на Divisor, возвращая результат Result (целую часть) и остаток Remainder (разность между Dividend и Result * Divisor). Например, оператор

DivMod(11, 4, Result, Remainder);

возвращает Result = 2 и Remainder = 3.

Возвращает число, ближайшее к указанному в заданном диапазоне

Библиотеки VCL Win32, VCL .NET

Модуль в VCL Win32 Math

Пространство имен в .NET Borland.Vcl.Math

function EnsureRange(const AValue, AMin, АМах: Integer): Integer; function EnsureRange(const AValue, AMin, AMax: Int64): Int64; function EnsureRange(const AValue, AMin, AMax: Double): Double;

Перегруженные варианты функции EnsureRange возвращают для разных типов параметров число, ближайшее к AValue в диапазоне AMin — АМах. Если AValue находится внутри диапазона, возвращается значение AValue. Если AValue АМах, возвращается АМах. Например,

Илон Маск рекомендует:  Базовый синтаксис

EnsureRange(5, 1, 10); // возвращается 5 EnsureRange(11, 1, 10); // возвращается 10 EnsureRange(О, 1, 10); // возвращается О

Функция API Windows, делает доступным или недоступным указанное окно 994

Глава 12 ¦ Описания функций

Библиотеки VCL Win32, VCL .NET Модуль в VCL Win32 Windows

Пространство имен в VCL .NET Borland.VcLWindows Объявление

function EnableWindow(hWnd:HWND,bEnable: boolean) : boolean;

Функция API Windows EnableWindow делает окно, указанное своим дескриптором hWnd, доступным или недоступным для любых действий пользователя с помощью мыши или клавиатуры. Параметр bEnable задает устанавливаемое значение доступности: true — доступно, false — недоступно. Если окно недоступно, то предусмотренные в нем процессы продолжаются, но пользователь не может воздействовать на это окно.

Если окно было до этого доступным, функция возвращает нуль, если оно не было доступным — возвращается ненулевое значение. Развернутую информацию об ошибке можно получить вызовом функции GetLastError.

Формируют дату из года, месяца и дня Библиотеки VCL Win32, VCL .NET Модуль в VCL Win32 SysUtils

Пространство имен в VCL .NET Borland.Vcl.SysUtils Объявления

function EncodeDate(Year, Month, Day: Word): TDateTime; function TryEncodeDate(Year, Month, Day: Word;

out Date: TDateTime): Boolean;

Функция EncodeDate возвращает дату типа TDateTime (см. в гл. 9), сформированную из года Year, месяца Month и дня Day. Допустимые значения Year от 1 до 9999, допустимые значения Month лежат в пределах от 1 до 12. Допустимые значения Day зависят от месяца, а для февраля — от того, високосный год, или нет. При неверных значениях параметров генерируется исключение EConvertError.

Функция TryEncodeDate формирует дату Date типа TDateTime аналогичным образом. Однако, при неверных значениях параметров не генерируется исключение, а возвращается false.

См. также в гл. 9 методы EncodeDate и TryEncodeDate типа Borland.Delphi. S vstem.TDateTime.

Приведенный ниже код переводит в тип TDateTime дату 25 октября 1917

var T: TDateTime; T := EncodeDate(1917, 10, 25)* EncodeTime, TryEncodeTime

Аналогичный результат даст оператор:

TryEncodeDate(1917, 10, 25, Т);

Формируют время из часа, минуты, секунды и миллисекунды Библиотеки VCL Win32, VCL .NET Модуль в VCL Win32 SysUtils

Пространство имен в VCL .NET Borland.Vcl.SysUtils Объявления

function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime; function TryEncodeTime(Hour, Min, See, MSec: Word;

out Time: TDateTime): Boolean;

Функция EncodeTime возвращает время типа TDateTime (см. в гл. 9), сформированное из часа Hour, минуты Min, секунды Sec и миллисекунды MSec. Допустимые значения Hour от О до 23, допустимые значения Min и Sec лежат в пределах от О до 59, допустимые значения MSec лежат в пределах от О до 999. При неверных значениях параметров генерируется исключение EConvertError.

Функция TryEncodeTime формирует время Time типа TDateTime аналогичным образом. Однако, при неверных значениях параметров не генерируется исключение, а возвращается false.
Предыдущая 422 423 424 425 426 427 .. 478 >> Следующая

EncodeTime — Функция Delphi

почему такая конструкция: DateTimeToStr(EncodeDateTime(1111, 11, 11, 11, 11, 11, 0)) возвращает — «12.11.1111 12:48:49». Ничего не пойму.

А что такое «EncodeDateTime» ?

EncodeDateTime.
знаю EncodeDate и EncodeTime .

Ну какая разница, почему тогда
DateTimeToStr(EncodeDate(1111, 11, 11)+EncodeTime(11,11,11,0)) возвращает «12.11.1111 12:48:49»?

Delphi syntax:
function EncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word):TDateTime;

А зачем тебе 1111й год?

Пользователь вводить в поле по маске: dd mm yyyy hh nn ss, я разбираю дату, анализирую разбираю на части использую, потом хочу собрать.

Ну и в каком месте собака порылась? Разбей на части выражение и локализуй ошибку.

DateTimeToStr(EncodeDate(1111, 11, 11)-EncodeTime(11,11,11,0))

Спасибо MBo!
НО — это дельфийский код, особое внимание на выделенную строчку. модуль DateUtils.

function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond,
AMilliSecond: Word; out AValue: TDateTime): Boolean;
var
LTime: TDateTime;
begin
Result := TryEncodeDate(AYear, AMonth, ADay, AValue);
if Result then
begin
Result := TryEncodeTime(AHour, AMinute, ASecond, AMilliSecond, LTime);
if Result then
AValue := AValue + LTime;.
end;
end;

EncodeDate(1111, 11, 11) — отрицательное число!!

Дата видимо отрицательная уже к этому времени. Вполне логично, что стандартные функции под это не заточены.

Тогда не совсем понятно как пользоваться этими ф-циями, путаница какая то.

Очень просто. Пишешь S := DateToStr(0);
Смотришь, какая дата оказалась в S. Это точка отсчета. Если дата больше, то плюс. Если меньше — то минус.

to Smithson
Спасибо, хорошее решение, жаль уже сделал. Пришлось изгалиться.
EncDate := StrToDateTime(Format(«%d.%d.%d %d:%d:%d»,[Sectionы[nDay], Sections[nMonth], Sections[nYear],Sections[4], Sections[5], Sections[6]]))

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