Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Delphi. Какой правильный способ конвертации даты из формата "1.1.2024" в "01.01.2024"?

Вячеслав Власов Гуру (3679), закрыт 3 месяца назад
Лучший ответ
D P Мудрец (18249) 4 месяца назад
  1. Разбор строки с датой на отдельные поля с ее компонентами. При этом проверяем разделитель полей и на его основе решаем, дата ли это вообще и если дата - то в каком она формате. Надо обрабатывать форматы ДД.ММ.ГГГГ, ММ/ДД/ГГГГ и ГГГГ-ММ-ДД (это самый правильный и удобный формат)
  2. Конвертация выявленных компонентов даты в числовые значения
  3. Валидация полученных числовых значений
  4. Преобразование компонентов обратно в стоку выбранного вами формата
Остальные ответы
kaiu Высший разум (119311) 4 месяца назад
можно тупо, что если позиция точки на 2 символе, то добавить впереди ноль, если потом позиция точки на 5 символе, то добавить после 3 символа тоже ноль. Но это без проверки на правильность даты. А с проверкой надо бы разделить по точке на 3 значения и собрать из них потом снова тип даты
Jurijus Zaksas Искусственный Интеллект (453892) 4 месяца назад
В Delphi нет никакого "формата даты". Либо у тебя есть дата, и тогда ты можешь форматировать ее как угодно при помощи FormatDateTime, либо это у тебя там не дата, а строка. В этом случае нужен контекст, например - откуда она берется такая красивая. Тогда можно будет подумать, что с ней делать и что в этом случае будет "правильно".
Вячеслав ВласовГуру (3679) 4 месяца назад
Ну, допустим, она вводится вручную, либо берется из имени файла. А ее надо привести в соответствующий вид. И, да, это строка. Просто, чтобы не получилось число "20" как "020". А проверять 1..9 - это уже нагромождение. Я тоже подумал про FormatDateTime, чтобы одной-двумя строками обойтись.
Jurijus Zaksas Искусственный Интеллект (453892) Есть ЕМНИП ParseDate, есть FormatDateTime - вот ими, болезными, и надо оперировать в данном случае, подсовывая им соотв. форматы. Но в случае с ручным вводом может все же иметь смысел заморочиться с анализом строки вручную. Потому что в каком именно там формате пользователь введет данные - это всегда загадочная загадка.
Алекс Куха Высший разум (468594) 4 месяца назад
split/join - не?
Вячеслав ВласовГуру (3679) 4 месяца назад
А подробнее?
Алекс Куха Высший разум (468594) Вячеслав Власов, даже не знаю, что тут ещё написать. вот пример
 words: TArray; 
words := "1.1.2024".Split([' ']); 
Похожие вопросы