EncodeDate — Функция Delphi


EncodeDate

Encode a Year,Month,Day to a TDateTime value.

Declaration

Source position: datih.inc line 117

Description

EncodeDate encodes the Year , Month and Day variables to a date in TDateTime format. It does the opposite of the DecodeDate procedure.

The parameters must lie withing valid ranges (boundaries included):

Year must be between 1 and 9999. Month must be within the range 1-12. Day msut be between 1 and 31.

Errors

In case one of the parameters is out of it’s valid range, an EConvertError exception is raised.

See also

Encode a Hour,Min,Sec,millisec to a TDateTime value.

Decode a TDateTime to a year,month,day triplet

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

Функция EncodeDate возвращает значение типа DateTime для указанных значений.

Аргумент Year содержит год.

Аргумент Month содержит месяц в виде числа от 1 до 12. Число 1 соответствует январю, 12 соответствует декабрю.

Аргумент Day содержит день. День должен быть в пределах от 1 до 31.

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

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

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

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

Не указанные аргументы Hour, Minute, Second, MilliSecond заполняются нулями.

EncodeDate — Функция Delphi

The permitted parameter values are :

Year = 0..9999
Month = 1..12
Day = 1..31 (depending on month/year)

If you exceed these values, an EConvertError is raised. Notes The time value for the TDateTime is always set to 00:00:00.00 Related commands

DecodeDate Extracts the year, month, day values from a TDateTime var.
DecodeDateTime Breaks a TDateTime variable into its date/time parts
DecodeTime Break a TDateTime value into individual time values
EncodeDateTime Build a TDateTime value from day and time values
EncodeTime Build a TDateTime value from hour, min, sec and msec values
Example code : Assign a date to a TDateTime variable
// Full Unit code.
// ————————————————————
// You must store this code in a unit called Unit1 with a form
// called Form1 that has an OnCreate event called FormCreate.

unit Unit1;

uses
SysUtils, // Unit containing the EncodeDate command
DateUtils,
Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;

var
Form1: TForm1;

implementation
<$R *.dfm>// Include form definitions

EncodeDate — Функция Delphi

И ещё вопрос: а не удобнее будет разделить файл kol.pas на несколько юнитов, по функциональности? Конечно, нужно будет несколько модулей вставлять в заголовке, но ведь и самому, наверное не очень просто править файл с числом строк более 60000?

Предложение конечно хорошее. Тем более что KOL постепенно растёт, и где гарантия что не разрастётся до очень больших размеров?

Не разрастется. То, что в нем есть, должно оставаться единым модулем.
Разбиение одного модуля на несколько увеличивает конечный exe-файл, байт на 50-100 на каждый отдельный модуль. Это конечно мелочь, тем более что большинство версий Delphi округляют файл до кратного какой-то степени 2. Но много мелочей вместе — уже досадная не-мелочь.

И что с того, что kol.pas большой? Компиляция замедляется? Я не
замечал. Разбираться в коде неудобно? Мне — наоборот удобно. Пока я разработчик, kol.pas делиться не будет.
В книгу Гиннеса попасть все равно не удастя хотя, там уже и побольше зафиксированы :)


> В книгу Гиннеса попасть все равно не удастя хотя, там уже
> и побольше зафиксированы :)

А сколько там не подскажете?


> И что с того, что kol.pas большой? Компиляция замедляется?

Нет, но Дельфи на это реагирует странно:
http://spellersoft.narod.ru/delphibugs.jpg
:-))

А как насчёт функций?
Ещё нужны: Date и возможность записывать и читать из реестра TDateTime.

Я тут это всё дело реализовал самостоятельно, правда сдаётся мне, что они работают с Delphi исчислением (от 1899).

Что будет тебе проще, Владимир, с нуля написать, или мои поправить?

Есть код — высылайте, посмотрю. Всяко легче, чем с нуля.
TDateTime в реестре — проще всего строкой хранить. Есть SQL-стандарт YYYYMMDDhhmmss (после перевода локального в гринвичское), никаких проблем с локализацией и обратным преобразованием. Или в любом удобном виде, хоть вещественное число в виде строки.

Существует ли версия функции Delphi EncodeDate / DecodeDate, которая может обрабатывать даты BC?

Функции Delphi EncodeDate / DecodeDate, похоже, способны обрабатывать только даты после 1.1.0001. Существуют ли некоторые реализации EncodeDate / DecodeDate, которые могут обрабатывать значения BC tDateTime?

1 ответ

AFAIK TDateTime — это базовый тип Windows, общий для COM, Variants, DotNet и Delphi. Отрицательные значения можно использовать для дат до 1899 года.

Но это не так просто, поскольку с отрицательными значениями возникают проблемы, как указано на этой странице :

Неотъемлемой частью является дата, а дробью — время. Date.time. Это легко. Вещи становятся странными, когда значение отрицательное. Это на или до # 12/30/1899 #.

С современными датами время всегда идет вперед, как вы и предполагали. С отрицательными историческими датами время фактически бежит назад! Полночь # 1/1/1800 # равняется -36522, но полдень # 1/1/1800 # равна -36522,5 (меньше полуночи!), А за одну секунду до полуночи — -36522.9999884259 (даже меньше). В полночь часы переходят на -36521, что равно # 1/2/1800 #. Десятичная дробь по-прежнему показывает время, а неотъемлемой частью является дата, но каждая секунда уменьшает время, в то время как каждый новый день увеличивает его, не только на 1, но почти на 2. Отрицательные времена действительно противоречат интуитивному принципу.

Что еще хуже, значения времени для # 12/30/1899 # неоднозначны в двух отношениях. Во-первых, значение времени без даты равно этому времени в # 12/30/1899 #. Это означает, что 0.5 — это либо полдень, либо полдень на # 12/30/1899 #, в зависимости от контекста. Ноль — это или полночь, # 12/30/1899 # или полночь # 12/30/1899 #. Другая двусмысленность состоит в том, что все значения времени удваиваются для # 12/30/1899 #. 0.5 — полдень # 12/30/1899 #, но -0.5 также полдень # 12/30/1899 #. Неотъемлемой частью является дата, а дробью — время. Еще один сюрприз здесь: # 12/30/1899 23:59:59 PM # — # 12/29/1899 11:59:59 PM # = 2.99997685185185. Не 1, что вы обычно ожидаете в течение 24 часов. Будьте осторожны при работе с историческими датами.

Насколько мне известно, текущая реализация EncodeDate / DecodeDate будет работать, но у вас могут возникнуть проблемы при работе с отрицательными или близкими к нулю значениями TDateTime .

Вам лучше использовать свой собственный формат времени, например, ISO-8601 или простую запись как таковую:

И при вычислении вещей о продолжительности или отображении даты / времени вы должны знать, что «наше время» не является непрерывным. Таким образом, расчет с использованием трюка TDateTime=double не всегда будет работать должным образом. Например, я помню, что Тереза из Авилы умерла в 1582 году 4 октября , так же, как католические народы переходили от юлианского к григорианскому календарю, что требовало удаления 5–14 октября из календаря. :)

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

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).

Кодирование и декодирование кириллицы в Delphi для URL (URLDecode, URLEncode)

Давно что-то не было статей. В общем, исправляемся ��
В Delphi 6 был хороший компонентик — TNMURL, но начиная с Delphi 7 эти компоненты заменили Indy. И теперь, чтобы кодировать и декодировать кириллицу в Дельфи нужно облазить весь инет, если удастся найти нужные функции — они не будут работать у людей, которые используют Delphi 2007 и выше. Предлагаю вашему вниманию переписанный вариант этих функций.
Значит, выглядят они так:

DecodeDate e EncodeDate no Delphi

Veja neste artigo como utilizar as funзхes DecodeDate e EncodeDate no Delphi para manipular datas.

Marcar como lido

Lidar com datas й uma necessidade presente na maioria dos sistemas, principalmente os comerciais em que existem diversos cadastros e relatуrios que utilizam datas como filtros.

Neste post, veremos como trabalhar com duas das principais funзхes do Delphi para manipular datas: EncodeDate e DecodeDate.

DecodeDate й um procedure contido na unit SysUtils que recebe uma data, que se deseja separar, e mais trкs parвmetros por referкncia que receberгo o valor do dia, mкs e ano da data informada. Sua assinatura й a seguinte:

Note que os argumentos Year, Month e Day sгo recebidos por referкncia (por isso aparecem precedidos da palavra reservada var), pois serгo alteradas dentro do procedure.

EncodeDate tambйm estб contida na unit SysUtils e й uma function que atua de forma inversa а DecodeDate, recebendo trкs argumentos que representam o ano, o mкs e o dia e retorna uma data composta por essas partes. Sua assinatura й a seguinte:

Para compreender melhor o funcionamento dessas funзхes, vamos criar uma aplicaзгo VCL Forms no Delphi. Primeiramente, adicione um botгo e trкs labels, que devem ser nomeados como lblDia, lblMes e lblAno. No evento OnClick do botгo, codifique conforme a Listagem 1.

Listagem 1: Exemplo de uso do DecodeDate

Ao executar a aplicaзгo e clicar no botгo, teremos nos labels, separadamente, o dia, o mкs e o ano da data atual (a funзгo Date retorna um TDateTime com a data atual), semelhante а Figura 1.

Figura 1: Exemplo de uso do DecodeDate

Para testar o EncodeDate, precisaremos de apenas um label, que chamaremos de lblData e no OnClick do botгo codificaremos de acordo com a Listagem 2. Note que podemos montar uma data a partir de valores separados, desde que esses parвmetros formem uma data vбlida.

Listagem 2: Exemplo de uso do EncodeDate

O resultado й mostrado na Figura 2.

Figura 2: Exemplo de uso do EncodeDate

As possibilidades de uso destas funзхes sгo as mais diversas possнveis. Por exemplo, imagine que precisamos montar um relatуrio cujo perнodo de filtro deve ser sempre do primeiro dia do mкs corrente atй o dia atual. Poderнamos usar a funзгo DecodeDate para pegar o ano e mкs atuais, e depois usar o EncodeDate para criar a primeira data com esses valores e o dia 1. Na Listagem 3 temos o cуdigo deste exemplo, seguido do resultado na Figura 3.

Listagem 3: Exemplo prбtico de uso

Figura 3: Exemplo prбtico de uso

Certamente vocк jб precisou trabalhar com datas em suas aplicaзхes. Agora, poderб explorar essas funзхes e utilizб-las em diversas situaзхes.

Tecnologias:

  • Delphi

Marcar como lido

Нестандартное к-во переменных для EncodeDate

Здравствуйте, уважаемые Форумчане.

Столкнулся с такой проблемой:
Выбираю из базы отдельно разницы между двумя датами, в виде дни, месяцы и годы, перебираю запрос (словом мне нужно посчитать стаж для человека).
Результат получается иногда таким: 35 лет 47 месяцев 154 дня.
Стандартная Delf(овская) функция EncodeDate требует валидного к-ва дней.
Вот только вопрос, на сколько делить дни для получения правильной цифры на 28 на 30 или на 31?
Возможно предложите более простой способ решения данной проблемы.

05.03.2020, 08:35

encodedate.
Помогите пожалуйста разобраться! По заданию — считаю номер недели в семестре. На вход — начало.

Нужно нестандартное решение для сервера
Здравствуйте! Я не профессионал в вашей области. Очень бы хотелось мнение специалистов. Меня.

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

Нестандартное окно
Как сделать, что бы нестандартное окно со свойством WindowState=Maximized не перекрывало панель.

Нестандартное разрешение
Имеется монитор с разрешением 1280х1024 и соотношением сторон 5-4. В игре (через конфиг файл игры).

05.03.2020, 10:36 2
05.03.2020, 10:36

Нестандартное окно с++
Стало очень интересно, каким образом рисуются окна, выглядящие не так, как дефолтные. Например.

Нестандартное окно
Добрые люди подскажите как сделать не стандартное окно на C#, т.е. его надо полностью перерисовать.

Нестандартное решение
И снова здравствуйте! Появился вот такой любопытный вопрос. Пусть у нас есть сервер на.

URLEncode и URLDecode в Delphi

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

function DigitToHex(Digit: Integer): Char;
begin
case Digit of
0..9: Result := Chr(Digit + Ord(‘0’));
10..15: Result := Chr(Digit — 10 + Ord(‘A’));
else
Result := ‘0’;
end;
end; // DigitToHex
function URLEncode(const S: string): string;
var
i, idx, len: Integer;
begin
len := 0;
for i := 1 to Length(S) do
if ((S[i] >= ‘0’) and (S[i] = ‘A’) and (S[i] = ‘a’) and (S[i] for i := 1 to Length(S) do
if S[i] = ‘ ‘ then
begin
Result[ ;
> end
else if ((S[i] >= ‘0’) and (S[i] = ‘A’) and (S[i] = ‘a’) and (S[i] > end
else
begin
Result[ ;
Result[ > Result[ > > end;
end; // URLEncode
function URLDecode(const S: string): string;
var
i, idx, len, n_coded: Integer;
function WebHexToInt(HexChar: Char): Integer;
begin
if HexChar = 1 then
begin
n_coded := n_coded + 1;
if n_coded >= 3 then
n_coded := 0;
end
else
begin
len := len + 1;
if S[i] = ‘%’ then
n_coded := 1;
end;
SetLength(Result, len);
> n_coded := 0;
for i := 1 to Length(S) do
if n_coded >= 1 then
begin
n_coded := n_coded + 1;
if n_coded >= 3 then
begin
Result[ > WebHexToInt(S[i])) mod 256);
n_coded := 0;
end;
end
else
begin
> if S[i] = ‘%’ then
n_coded := 1;
if S[i] = ‘+’ then
Result[
else
Result[ > end;
end; // URLDecode

Илон Маск рекомендует:  Основное информационное окно пример api карт google
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL