DateUtils в Delphi


Содержание

DateUtils

Привет . Помогите написать на Delphi5 функцию которая возвратит количество месяцев между датами Дат1 и Дат2.( с учетом висакосного и не висакосного года)Спасибо !© Бомж Inc.

MothsBetween — читайте хелп. В этом юните не так уж много функций

Да чего уж там. Давай полный текст задачи, тебе всё и напишут сразу и делать самому ничего не надо.

не надо вестись на подковырку «с учетом висакосного и не висакосного года», т.к. собстванно даты тут непричем. Сразу переводи обе даты в номер месяца и года, а далее вычисляй сколько минуло месяцев. Все сравнительно просто.

Не точно , но помоему бе учота не обойтис

Вы действительно считаете, что количество месяцев между 01.01.2004 и 01.01.2005 (2004 год високосный) отличается от количества месяцев между 01.01.2005 и 01.01.2006 (2005 год високосный) .

Я считаю что количество месяцев 31.12.2003 и 28.02.2004 = 1 отличается от31.12.2004 и 28.02.2005 = 2 . Хмммм . Так что свежая тема , налитай .

Я считаю что количество месяцев 31.12.2003 и 28.02.2004 = 2 отличается от31.12.2004 и 28.02.2005 = 1 .

По-моему, в этих двух случаях кол-во месяцев между датами одинаково.

Я знаю такую фунчию в PL/SQL MonthsBeetwean. Он делает все правилно ..Думаю наверника людам встечалис таки задачи и надеюс если кто то решал поможет . ну а если нет то придется самому написать ( а времини мало )

Или все-таки объясните, что такое для вас количество месяцев ?

Тоже что для всего остолного мира . т.е. для меня ) между 05 феврал и 04 мартом не прошло

Я знаю такую фунчию в PL/SQL MonthsBeetwean. Он делает все правилно ..Думаю наверника людам встечалис таки задачи и надеюс если кто то решал поможет . ну а если нет то придется самому написать ( а времини мало )

MONTHS_BETWEEN Syntax MONTHS_BETWEEN(d1, d2)Purpose Returns number of months between dates d1 and d2. If d1 is later than d2, result is positive; if earlier, negative. If d1 and d2 are either the same days of the month or both last days of months, the result is always an integer; otherwise Oracle7 calculates the fractional portion of the result based on a 31-day month and considers the difference in time components of d1 and d2. Copyright (c) 1994, Oracle Corporation.Вы уверены, что эта функция — то что нужно? и «правильно» для Вас работает?

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

Прежде чем использовать в Дельфи функции преобразования дат и времени советую подключить DateUtils

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls, DateUtils, ComCtrls;

Вот пример того, что у меня получилось с некоторыми функциями:

Код программы:

//вывод текущей даты

procedure TForm1.Button1Click(Sender: TObject);

//вывод текущей даты

procedure TForm1.FormCreate(Sender: TObject);

StatusBar1.Panels[0].Text:=’Тестовая програмка на фунции дат и времени’;

//вывод текущей даты и времени

procedure TForm1.Button2Click(Sender: TObject);

//день недели

procedure TForm1.Button3Click(Sender: TObject);

DateUtils в Delphi

Обычно, когда нам требуется получить текущую дату на Delphi, мы, сильно не задумываясь, используем очень знакомую нам функцию «Now«:

Label1.Caption:=datetostr(Now);

В результате мы получим текущую дату, т.е. сегодняшнюю: 20.09.2013

А что нам делать, если требуется программно вывести только текущий день или месяц или год? А если необходимо рассчитать количество дней в году? Конечно, многие уже немного опытные новички сразу же прибегнут к функции copy и будут извлекать из полученной нами ранее строки Label1 первые два символа, как сегодняшний день, третий и четвертый — месяц и т.д. Согласитесь, это немного кропотливая работа, особенно, если еще и учитывать, что первые десять дней месяца имеют не два символа, а один (например: не 05.07.2007, а 5.07.2007).

Друзья мои, хватит загружать свою голову и давайте избегать подобные проблемы легко и просто!Предлагаю вам познакомиться со стандартным модулем DateUtils, который предоставляет множество функции для работы с датами.

DayOfTheMonth Дает день месяца для значения TDateTime (ISO 8601)
DayOfTheWeek Возвращает индекс дня недели для значения TDateTime (ISO 8601)
DayOfTheYear Выдает день года для значения TDateTime (ISO 8601)
DaysBetween Выдает целое число дней между 2 датами
DaysInAMonth Выдает число дней в месяце
DaysInAYear Выдает число дней в году
DaySpan Выдает дробное число дней между 2 датами
EncodeDateTime Формирует значение TDateTime из значений времени и дня
EndOfADay Генерирует значение TDateTime, установленное на самый конец дня
EndOfAMonth Генерация значения TDateTime, установленное на самый конец месяца
IncDay Приращивает переменную типа TDateTime на + или — число дней
IncMillisecond Приращивает переменную типа TDateTime на + или — число миллисекунд
IncMinute Приращивает переменную типа TDateTime на + или — число минут.
IncSecond Приращивает переменную типа TDateTime на + или — число секунд
IncYear Увеличивает TDateTime переменную на количество лет
MonthOfTheYear Выдает месяц года для значения TDateTime
RecodeDate Изменяет только дату переменной TDateTime
RecodeTime Изменяет только время переменной TDateTime
Tomorrow Возвращает дату завтрашнего дня
Yesterday Выдает вчерашнюю дату

Ну теперь в нашем случае поступаем следующим образом:

Разница дат

Заранее спасибо.

Комментарий модератора
Теги кода добавлены модератором. По правилам форума для оформления кода следует применять соответствующие теги. Например, для оформления кода Delphi, следует выделить этот код и на панели редактирования сообщения нажать кнопку «DELPHI».
05.05.2011, 00:41

Разница между двух дат в месяцах
Есть две даты, например 30.11.2014 и 31.03.2015, разница между ними 4 месяца, как это программно.

Сравнение двух дат и вывод дат находящихся между ними
Здравствуйте! Тут такое дело, вводятся две определенные ДАТЫ в Edit1 и Edit2 в формате.

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

Сравнение дат
Есть переменная data типа TDateTime, есть переменная month типа int в котором хранится количество.

Сортировка дат
Есть некий код он сравнивает две даты и понимает какая ихз них больше а какая меньше: procedure.

IncHour procedure in DateUtils

I have the following bit of Delphi 7 code to increment a TDateTime value by one hour. For some reason it doesn’t work.

Contents of StatusMemo after code runs:

It behaves like IncHour is not working. I tried using IncMinute(dtval,60), and got the same result. What am I missing?

1 Answer 1

IncHour returns the incremented value, it doesn’t update the passed in variable.

So you need to do:

Not the answer you’re looking for? Browse other questions tagged delphi datetime delphi-7 or ask your own question.

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2020 Stack Exchange Inc; user contributions licensed under cc by-sa 4.0 with attribution required. rev 2020.11.11.35399

System.IOUtils – удобные утилиты Delphi для работы с файлами и директориями

Автор: Alex. Опубликовано в Программирование 27 Сентябрь 2020 . просмотров: 12656

Начиная с версии XE2 в Delphi появился юнит System.IOUtils, включающий удобные утилиты для работы с файлами и директориями. Предлагаю вместе подробно разобраться с тем, что в юните System.IOUtils имеется и попробовать на примерах как это всё работает.

Всего в юните System.IOUtils вы можете обнаружить три структуры TDirectory, TFile и TPath, содержащие только статические методы. Если вы разрабатываете на .NET, то вы заметите сходство этих трёх структур с классами Directory, File и Path из пространства имён System.IO в .NET. На самом деле в справке Delphi, так и написано, что большинство методов схожи с методами аналогичных классов в .NET. Это даже неплохо, ведь классы Directory, File и Path очень удобные, значит и в Delphi теперь всё должно быть удобно. Но давайте проверять.

Использование TDirectory

Структура TDirectory используется в Delphi для работы с директориями. Она содержит только статические методы. Давайте рассмотрим их.

Создание и удаление директории

Начнём наше знакомство со структурой TDirectory, пожалуй, с методов для создания и удаления директории. Для этого есть соответствующие методы CreateDirectory и Delete. Функция CreateDirectory принимает во входном параметре полный путь к директории и создаёт все недостающие в указанном пути папки. Например, если вы хотите создать директорию «Test3», путь к которой должен быть «C:\Test1\Test2\Test3», а у вас на компьютере есть только директория «C:\Test1», которой нет директории «Test2», то функция CreateDirectory создаст сначала директорию «Test2» в директории «Test1», а затем создаст директорию «Test3» в директории «Test2». Т.е. после вызова этой функции у вас будут все три директории, указанные в пути.

Функция Delete удаляет только последнюю директорию, указанную в пути. Например, если у вас на диске «C:» есть директория «Test1», в ней директория «Test2», и в ней директория «Test3», то чтобы удалить директорию «Test3» в функцию Delete нужно передать полный путь к этой директории, в нашем примере это будет «C:\Test1\Test2\Test3». Также функция Delete умеет рекурсивно удалять вложенные директории и файлы, если второй входной параметр установлен в true.

Вот примеры использования функций CreateDirectory и Delete:

Проверка существования директории

Чтобы проверить, существует ли директория, у структуры TDirectory есть функция Exists. Первый параметр функции – это путь к директории. Второй необязательный параметр FollowLink учитывается только при использовании символической ссылки. Если нужно проверить только существование символической ссылки на директорию, то нужно установить этот параметр в false, а если нужно проверить наличие всего сразу, т.е. и символической ссылки на директорию и самой директории, то нужно установить этот параметр в true. Вот примеры использования:

Чтение и изменение характеристик директории

В структуре TDirectory для чтения и изменения характеристик директории есть следующие методы:

        • GetAttributes – возвращает атрибуты папки, такие как «только чтение», «системная», «скрытая» и т.п.;
        • SetAttributes – устанавливает новый набор атрибутов директории, такие как «только чтение», «системная», «скрытая» и т.п.;
        • GetCreationTime и GetCreationTimeUtc – возвращают дату и время создания директории;
        • SetCreationTime и SetCreationTimeUtc – устанавливают дату и время создания директории;
        • GetLastAccessTime и GetLastAccessTimeUtc – возвращают дату и время последнего обращения к директории;
        • SetLastAccessTime и SetLastAccessTimeUtc – устанавливают дату и время последнего обращения к директории;
        • GetLastWriteTime и GetLastWriteTimeUtc – возвращают дату и время последней записи в директорию.
        • SetLastWriteTime и SetLastWriteTimeUtc – устанавливают дату и время последней записи в директорию.

Функции, возвращающие и устанавливающие время, в конце имени которых есть суффикс «Utc», возвращают время в формате всемирного координированного времени (UTC).


Теперь рассмотрим примеры:

Копирование, перемещение и переименование директории

Для копирования директории у структуры TDirectory есть метод Copy, а для перемещения или переименования – метод Move. Перечисленные выше операции производятся с директорией в целом, включая вложенные директории и файлы.

Если директория, в которую происходит копирование, уже существует, то произойдёт слияние существующей директории и директории, которую вы копируете. При этом совпадающие файлы в директории назначения будут удалены, а вместо них будут скопированы файлы из директории источника.

Вот пример использования методов Copy и Move:

Получение списка файлов и поддиректорий в директории

Чтобы получить список всех файлов и поддиректорий, находящихся внутри какой-либо директории у структуры TDirectory есть методы GetFiles, GetDirectories и GetFileSystemEntries. Метод GetFiles возвращает только файлы, метод GetDirectories – только поддиректории, метод GetFileSystemEntries возвращает и файлы и директории. Каждый из этих методов поддерживает шаблоны поиска и фильтры и может работать рекурсивно.

Кроме того здесь стоит упомянуть и о функции IsEmpty, которая проверяет, пустая директория или нет.

Вот примеры использования методов GetFiles, GetDirectories, GetFileSystemEntries и IsEmpty:

Работа с путями директорий

Путь, который определяет местоположение директории, может сказать о многом. Из него, например, можно получить корневую директорию с помощью функции GetDirectoryRoot. В нём можно найти все родительские директории с помощью рекурсивного вызова функции GetParent. Иногда путь может быть относительным, что вы сможете легко проверить с помощью функции IsRelativePath.

Дополнительно может пригодиться функция GetLogicalDrives, возвращающая список всех логических дисков на компьютере.

Вот примеры использования этих функций:

Получение и изменение текущей директории приложения

Кроме всего вышеперечисленного у структуры TDirectory есть функции для получения и изменения текущей директории приложения: GetCurrentDirectory и SetCurrentDirectory. Вот примеры использования:

Использование TFile

Структура TFile используется в Delphi для работы с файлами. Она содержит только статические методы. Давайте рассмотрим их.

Создание и удаление файла

Для создания файла у структуры TFile есть несколько методов:

        • Create – создаёт пустой файл и возвращает ассоциированный с ним поток (экземпляр TFileStream), в который сразу можно записывать какие-либо данные.
        • CreateText – создаёт пустой файл и возвращает экземпляр объекта TStreamWriter для записи текста в файл.
        • CreateSymLink – создаёт символическую ссылку (которая, по сути, тоже является файлом) для папки или файла. Обратите внимание, что для создания символической ссылки, ваше приложение должно выполняться с правами администратора.

Для удаления файла есть функция Delete.

Функции удобной записи в файл и чтения из него

У структуры TFile есть очень удобные методы, позволяющие делать запись в файл и чтение из него, всего в одну строчку. Вот эти методы:

        • WriteAllBytes – записывает массив байт в файл. Если указанный файл существует, то он будет перезаписан.
        • WriteAllLines – записывает все строки из массива строк в файл. Если указанный файл существует, то он будет перезаписан. Метод умеет конвертировать записываемый текст в нужную кодировку. Если указана кодировка и она не ANSI, то метод записывает маркер последовательности байтов (BOM).
        • WriteAllText – записывает одну строку в файл. Если указанный файл существует, то он будет перезаписан. Метод умеет конвертировать записываемый текст в нужную кодировку. Также метод умеет записывать маркер последовательности байтов (BOM).
        • AppendAllText – добавляет текст в конец файла. Если файла нет, то он будет создан.
        • ReadAllBytes – считывает файл в новый массив байт.
        • ReadAllLines – считывает все строки из файла в массив строк. Метод умеет считывать текст в заданной кодировке.
        • ReadAllText – считывает весь текст из файла. Метод умеет считывать текст в заданной кодировке.

Вот примеры использования методов WriteAllText, ReadAllText и AppendAllText:

Вот примеры использования методов WriteAllLines, ReadAllLines и AppendAllText:


А вот примеры использования функций WriteAllBytes и ReadAllBytes:

Ещё несколько функций для того, чтобы открыть файл

Теперь рассмотрим ещё на несколько удобных функций для открытия файла. Это функции AppendText, OpenText, Open, OpenRead, OpenWrite.

Функции AppendText и OpenText предназначены для работы с текстовыми файлами в кодировке UTF-8. AppendText открывает файл, или создаёт новый файл, если его не было, для добавления в него текста, а OpenText – для чтения из текстового файла. Функция AppendText для работы с файлом, создаёт и возвращает объект TStreamWriter, который после использования нужно удалить. Функция OpenText для чтения текста создаёт и возвращает объект TStreamReader, который после использования также нужно удалить.

Функции Open, OpenRead, OpenWrite по сути просто создают объект TFileStream и возвращают его. Функция OpenRead открывает файл на чтение, функция OpenWrite — на запись, а функция Open может, как создавать файлы, так и открывать их в различных режимах и с различными привилегиями.

Рассмотрим примеры использования этих функций:

Проверка существования файла

Так же как и у TDirectory у структуры TFile есть функция Exists. Первый параметр функции – это путь к файлу. Второй необязательный параметр FollowLink учитывается только при использовании символической ссылки. Если нужно проверить только существование символической ссылки на файл, то нужно установить этот параметр в false, а если нужно проверить наличие всего сразу, т.е. и символической ссылки на файл и самого файла, то нужно установить этот параметр в true. Вот примеры использования:

Получение цели из символической ссылки

Чуть выше мы упоминали работу с символической ссылкой, а теперь разберёмся, как узнать, на что ссылается символическая ссылка. Для этого у структуры TFile есть две функции с именем GetSymLinkTarget. Вот пример:

Чтение и изменение характеристик файла

В структуре TFile для чтения и изменения характеристик файла есть следующие методы:

        • GetAttributes – возвращает атрибуты файла, такие как «только чтение», «системный», «скрытый» и т.п.;
        • SetAttributes – устанавливает новый набор атрибутов для файла, такие как «только чтение», «системный», «скрытый» и т.п.;
        • GetCreationTime и GetCreationTimeUtc – возвращают дату и время создания файла;
        • SetCreationTime и SetCreationTimeUtc – устанавливают дату и время создания файла;
        • GetLastAccessTime и GetLastAccessTimeUtc – возвращают дату и время последнего обращения к файлу;
        • SetLastAccessTime и SetLastAccessTimeUtc – устанавливают дату и время последнего обращения к файлу;
        • GetLastWriteTime и GetLastWriteTimeUtc – возвращают дату и время последней записи в файл.
        • SetLastWriteTime и SetLastWriteTimeUtc – устанавливают дату и время последней записи в файл.

Функции, возвращающие и устанавливающие время, в конце имени которых есть суффикс «Utc», возвращают время в формате всемирного координированного времени (UTC).

Кроме приведённых здесь функций есть ещё недокументированные статические функции IntegerToFileAttributes и FileAttributesToInteger. Первая конвертирует атрибуты операционной системы для файла или директории в атрибуты, описанные в перечислении TFileAttribute, а вторая — обратно.

Копирование, перемещение и переименование файлов

Для копирования файла у структуры TFile есть метод Copy, а для перемещения или переименования – метод Move.

Метод Copy кидает ошибку, если файл с таким же именем, как файл назначения существует. Однако вы можете установить третий параметр метода Overwrite в true, и тогда операция копирования всё равно выполнится.

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

Метод Move кидает ошибку, если файл назначения существует.

Вот пример использования методов Copy и Move:

Шифрование и расшифровывание файлов

Шифрование и расшифровывание файла можно сделать с помощью, соответственно, методов Encrypt и Decrypt. После шифрования вы сможете работать с файлом как и раньше. Всю работу по чтению из зашифрованного файла, запись в него и т.д. берёт на себя операционная система. Вот пример использования функций.

Замена содержимого файла

У структуры TFile есть метод Replace, позволяющий заменить содержимое файла на содержимое другого файла. По сути, происходит замена одного файла на другой, но при замене сохранятся все атрибуты файла, содержимого которого мы меняем. Атрибуты копируются следующие: время создания, краткое название файла, идентификатор объекта, дискреционный список контроля доступа (DACL), атрибуты безопасности, шифрование, сжатие и именованные потоки (не в заменяемом файле). Однако вы можете сказать функции Replace, что сохранять атрибуты не нужно, в этом случае вы можете установить четвёртый параметр функции IgnoreMetadataErrors в true. Также для заменяемого файла метод Replace создаёт резервную копию.

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

Использование TPath

Структура TPath используется в Delphi для работы с путями. Она содержит только статические методы и свойства. Давайте рассмотрим их.

Специальные символы

При составлении путей к файлам и директориям используются определённые специальные символы, которые могут быть разными в разных операционных системах. Чтобы не ломать голову и не гадать, какие символы для чего нужно использовать, мы можем узнать это у структуры TPath с помощью следующих статических свойств:

        • DirectorySeparatorChar – символ для разделения директорий разного уровня;
        • AltDirectorySeparatorChar – альтернативный символ для разделения директорий разного уровня;
        • ExtensionSeparatorChar – символ для разделения имени от расширения в имени файла;
        • PathSeparator – символ для разделения путей в переменных окружения;
        • VolumeSeparatorChar – символ для отделения буквы диска от остального пути.

Вот пример, с выводом значений всех свойств TPath:

Получение путей к специальным и пользовательским директориям

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

Вот пример использования функций:

Работа с путями

У структуры TPath есть много методов для работы с путями, например, для соединения путей или для разбивки:

        • ChangeExtension – изменяет расширение файла в указанном пути. Функция не меняет имя реального файла, она только возвращает новую получившуюся строку.
        • Combine – соединяет два пути в один. Например, если в первом параметре указан абсолютный путь к директории (например, C:\Test1), а во втором – имя файла (например, test.txt), то в результате функция вернёт абсолютный путь к файлу (получим C:\Test1\test.txt). Если во втором параметре указан абсолютный путь, то функция просто вернёт его, игнорируя первый параметр.
        • GetDirectoryName – извлекает путь к директории из пути к файлу. Например, для пути «C:\MyApp\Temp\temp.txt» функция вернёт «C:\MyApp\Temp». Функция вернёт пустую строку, если в пути к файлу нет части с диском и директорией, например, если вы передадите в функцию строку «test.txt».
        • GetExtendedPrefix – возвращает расширенный тип префикса для указанного пути, если он есть. Возможные варианты \\?\ или \\?\UNC\.
        • GetExtension – извлекает расширение файла из пути. Результат содержит точку в начале строки. Если у имени файла нет расширения, то функция вернёт пустую строку.
        • GetFileName – извлекает имя файла с расширением из пути к файлу. Например, для пути «C:\Test1\test.txt» функция вернёт «test.txt».
        • GetFileNameWithoutExtension – извлекает имя файла без расширения из пути к файлу. Например, для пути «C:\Test1\test.txt» функция вернёт «test».
        • GetFullPath – возвращает абсолютный путь для указанного относительного пути. При создании абсолютного пути функция использует текущую директорию. Например, если текущая директория «C:\MyApp», то для пути «\Temp\test.txt», функция вернёт «C:\MyApp\Temp\test.txt». Если вы передали в функцию абсолютный путь, то функция вернёт его без изменений.
        • GetPathRoot – возвращает корень для указанного пути. Например, для пути «C:\MyApp\Temp», функция вернёт «C:\».
        • HasExtension – функция проверяет, есть ли у указанного имени файла расширение.
        • HasValidFileNameChars – функция проверяет, содержит ли имя файла или шаблон имени файла только разрешённые символы.
        • HasValidPathChars – функция проверяет, содержит ли путь только разрешённые символы.
        • IsDriveRooted – функция проверяет, является ли путь абсолютным и содержит ли букву логического диска.
        • IsExtendedPrefixed – функция проверяет, содержит ли путь расширенный префикс.
        • IsPathRooted – проверяет, является ли путь абсолютным.
        • IsRelativePath – проверяет, является ли путь относительным.
        • IsUNCPath – проверяет, указан ли путь в UNC (Universal Naming Convention) формате. Путь в формате UNC начинается с двух слешей, например, «\\computer\folder».
        • IsUNCRooted – проверяет, указан ли корень в пути в формате UNC.
        • MatchesPattern – проверяет соответствие имени файла шаблону.

Вот примеры использования функций для работы с путями:

Функции для создания временных файлов

Часто в программе нужно создавать временные файлы, для которых нужно придумывать уникальные имена. Чтобы не придумывать свой собственный алгоритм для формирования уникального имени файла вы можете использовать следующие функции структуры TPath: GetTempFileName, GetGUIDFileName или GetRandomFileName. Первая функция создаёт пустой временный файл в папке операционной системы для хранения временных файлов, (см. функцию TPath.GetTempPath) и возвращает абсолютное имя созданного файла. Остальные две функции только генерируют имя файла и не гарантируют его уникальность.

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

Проверка наличия диска

В функции TPath есть функция DriveExists позволяющая определить, есть на компьютере диск, указанный в пути. Вот пример её использования:

Функции проверки символов для использования в пути и имени файла

Кроме всего вышеперечисленного у структуры TPath есть функции IsValidPathChar и IsValidFileNameChar для проверки символов, подходят ли они для использования в пути и в имени файла и функции GetInvalidFileNameChars и GetInvalidPathChars, которые возвращают символы, которые не допускается использовать в имени файла и в пути. Имея эти символы, вы самостоятельно сможете создать функции, которые будут проверять имена файлов и пути. Посмотрим, что возвращают эти функции:

Получение атрибутов файлов и директорий

И в завершении вкратце упомяну ещё методы GetAttributes и SetAttributes у структуры TPath. Они умеют читать и устанавливать атрибуты файлов и директорий. Описывать их нет смысла, т.к. они по своим функциям повторяют одноимённые методы структур TFile и TDirectory.

DateUtils в Delphi

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

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

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

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

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

Почему DateTimeToMilliseconds в DateUtils.pas помечен как внутренний?

Почему DateTimeToMilliseconds в DateUtils.pas помечен как внутренний? Могу ли я использовать его?

Я нашел это на сайте About.com:

Опыт показывает, что создание двух значений TDateTime с использованием функции и EncodeDateTime, отдаленных друг от друга только миллисекундой, функция возвращает MillisecondsBetween, а не возврат, как ожидалось, доказывая, что это неточно.

Итак, если меня не волнует несколько milisec, я должен использовать его.

TDateTime — двойной с плавающей запятой. Чтобы минимизировать ошибки округления при работе с значениями TDateTime , большинство вычислений в DateUtils преобразует TDateTime в миллисекунды.

Позже, когда вычисления готовы, значение Int64 снова возвращается к значению TDateTime .

Маркировка internal заключается в том, чтобы подчеркнуть, что эта функция является деталью реализации, а не использоваться вне библиотеки. То есть при работе с значениями TDateTime используйте общедоступные функции/процедуры.

Это небольшой тест функции MilliSecondsBetween :

Вы можете расширить тест более одного дня, чтобы узнать, есть ли какие-то аномалии.

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

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

Что мы всегда делаем, если мы «исправляем» стороннее устройство, подобное этому, копируем его в каталог в нашем собственном пути поиска (с именем PatchLibs) перед изменением. Таким образом, вы не можете «повредить» исходный файл, и вам не нужно беспокоиться о том, как восстановить исходные единицы.

Delphi: Конвертация даты

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

Добавляем в uses модуль DateUtils.

Делать будем через FormatSettings:TFormatSettings; и StrToDateTime.

var FormatSettings,FormatSettings1: TFormatSettings; inputstr,outputstr:string; begin FormatSettings.ShortDateFormat := ‘yyyy-mm-dd’; FormatSettings.DateSeparator := ‘-‘; FormatSettings.LongTimeFormat := ‘hh:nn:ss’; FormatSettings.TimeSeparator := ‘:’; FormatSettings1.ShortDateFormat := ‘dd.MM.yyyy’; FormatSettings1.LongTimeFormat := ‘hh:nn:ss’; FormatSettings1.TimeSeparator := ‘:’; FormatSettings1.DateSeparator := ‘.’; InputStr:=’2013-03-13 21:10:00′; outputstr:=datetimetostr(StrToDateTime(inputstr, FormatSettings), FormatSettings1); end;

В итоге получаем из «2013-03-13 21:10:00 -> 13.03.2013 21:10:00».

Параметры «FormatSettings»:
y = Год с 2-мя последними цифрами
yy = Год с 2-мя последними цифрами
yyyy = Год как 4 цифры
m = Номер месяца без 0
mm = Номер месяца как 2 цифры
mmm = Месяц с использованием ShortDayNames (Янв)
mmmm = Месяц с использованием LongDayNames (Январь)
d = Число без 0
dd = Число как 2 цифры
ddd = День с использованием ShortDayNames (Воск)
dddd = День с использованием LongDayNames (Воскресенье)
ddddd = День с использованием ShortDateFormat
dddddd = День с использованием LongDateFormat

c = Используется ShortDateFormat + LongTimeFormat
h = Час без 0
hh = Час без 0
n = Минуты без 0
nn = Минуты как 2 цифры
s = Секунды без 0
ss = Секунды как 2 цифры
z = Миллисекунды без 0
zzz = Миллисекунды как 3 цифры
t = Исполльзуется ShortTimeFormat
tt = Исполльзуется LongTimeFormat

Более подробно об операторе можно почитать по ссылке FormatSettings.

Илон Маск рекомендует:  Коротенькие приемы работы с MySQL на PHP
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL