delphi дату в строку

Преобразование даты в строку и обратно в языке Delphi

Самое интересное здесь — это формат строки. Он может содержать следующие символы:

  • d — показать дату, не подставляя нули в начале (1, 2, 3. 30, 31);
  • dd— показать дату, подставляя, если нужно, в начале ноль. В этом случае, если дата меньше 10, то она будет отражаться как 01, 02. 09;
  • ddd — показать день недели, используя короткий формат (Пн, Вт, Ср. );
  • dddd — показать день недели с полным названием (Понедельник, Вторник . );
  • ddddd — показать дату, используя короткий формат;
  • dddddd— показать дату, используя полный формат (Например, дата 10/02/2002 будет переведена в «10 февраля 2002»);
  • m — показать месяц без добавления нулей (1, 2,11, 12);
  • mm— показать месяц с добавлением нулей (01, 02, . 11, 12);
  • mmm— показать короткое название месяца;
  • Mmmm — показать полное название месяца (Январь, Февраль. );
  • уу — показать год двумя цифрами (98, 99, 00, 01);
  • уууу — показать год полностью;
  • h — показать часы, не добавляя в начале нулей;
  • hh — Показать часы с добавлением в начале нулей;
  • п — показать минуты, не добавляя в начале нулей;
  • пп — показать минуты с добавлением в начале нулей;
  • s — показать секунды, не добавляя в начале нулей;
  • ss — показать секунды с добавлением в начале нулей;
  • z — показать миллисекунды, не добавляя в начале нулей;
  • zz — показать миллисекунды с добавлением в начале нулей;
  • am/pm — использовать 12-часовое представление (до полудня/после полудня).

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

FormatDateTime(‘dd/mm/yyy’, DateO); // Дата будет в виде «24/02/2002»

FormatDateTime(‘dddddd’, DateO); // Дата будет в виде «24 февраля 2002»

FormatDateTime(‘hh:nn’, TimeO); // Время будет в виде «10:48»

FormatDateTime (‘hh:nn — ss ‘ , TimeO); // Время будет в виде «10:48 — 24»

Форматирование строки может включать смешивание обычных символов ( дата будет переведена в строку именно так, как укажет пользователь). Пример форматирования хорошо представлен в примере кода.

Следующее (не-Азиатское) символы формата даты могут быть использованы:

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

am/pm = Используется после h : возвращает 12 часов + am/pm
a/p = Используется после h : возвращает 12 часов + a/p
ampm = Как a/p но с TimeAMString,TimePMString
/ = Замененный значением DateSeparator
: = Замененный значением TimeSeparator

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

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 .
TwoDigitCenturyWindow = 50

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

DateSeparator Символ используемый для разделения полей отображаемой даты

DateTimeToStr Конвертирует значение даты и времени TDateTime в строку

LongDateFormat Переводит длинную версию даты в строковый формат

LongDayNames Массив названий дней недели, начинается с 1 = Воскресенье

LongMonthNames Массив названий месяцев, начинается с 1 = Январь

LongTimeFormat Длинная версия времени в строковом формате

ShortDateFormat Компактная версия даты в строковом формате

ShortDayNames Массив названий дней недели, начиная с 1 = Воскресенье

ShortMonthNames Массив названий дней месяца, начиная с 1 = Январь

ShortTimeFormat Короткая версия времени в строковый формат

StrToDateTime Конвертирует строку с датой и временем в значение типа TDateTime

TimeAMString Определяет значение AM в процедуре DateTimeToString

TimePMString Определяет значение PM в процедуре DateTimeToString

TimeSeparator Символ, используемый для разделения полей времени

TwoDigitYearCenturyWindow Устанавливает порог столетия для преобразований строки года из 2 цифр

Когда я конвертирую string тип в TDateTime , я получаю сообщение об ошибке. Я использую функцию VarToDateTime . Моей датой в качестве строки является 2018-07-11T13:45:14.363 .

3 ответа

Успех преобразования из string в TDateTime с использованием VarToDateTime зависит от настроек локали в системе пользователей. Преобразование не выполняется, если эти параметры не соответствуют строке. Это причина, по которой преобразование завершается с ошибкой в ​​моей системе, а также на вашем.

Основной параметр, если вы работаете с Delphi XE6 или новее, заключается в использовании функции ISO8601ToDate() , как предложено Marc Guillot в другом ответе

Если вы работаете с Delphi 2010 или более поздней версией, вы можете использовать представленное здесь решение.

Более ранние версии, чем дроссель Delphi 2010 на «T» во входной строке и может преуспеть, если «T» удаляется или заменяется пробелом.

Используйте функцию преобразования, которая принимает параметр TFormatSetting , который можно отрегулировать в соответствии со строкой для преобразования. Эта функция представляет собой следующую перегрузку StrToDateTime() (см. документ Embarcadero )

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

Оцените статью