|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.03.2018, 17:25 | #1 | |
Пользователь
Регистрация: 15.11.2014
Сообщений: 75
|
Перевод строки в TDateTime
Добрый день.
Раньше не вникал в нюансы перевода вышеуказанных типов, а тут понадобилось переводить даты вида Цитата:
Итак, есть замечательная функция StrToDateTime. Есть компухтер с русской локализацией Виндовз. Уже проблемка. Месяц-то на английском. Ок, сделал вариант "в лоб": Код:
Далее все равно ловлю ошибку перевода. Я догадываюсь, что строки: Код:
И, наконец, третий (возможно главный) вопрос: а как это правильнее решить задачу перевода подобных строк в TDateTime? Ну то есть и айфоном можно гвозди в стену вбивать, но молотком вроде правильнее. |
|
09.03.2018, 18:47 | #2 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 09.03.2018 в 18:49. |
|
09.03.2018, 20:00 | #3 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
Вот накидал процедуру конвертации из вашей строки
Код:
Код:
Последний раз редактировалось Aliens_wolfs; 09.03.2018 в 20:19. |
09.03.2018, 20:37 | #4 |
Форумчанин
Регистрация: 13.08.2011
Сообщений: 184
|
В новых средах разработки типа RAD XE3 и старше, можно создавать отдельный экземпляр TFormatSettings настраивать и передавать последним параметром в StrToDateTime() и др. ф-ции преобразования.
Т.е нет необходимости менять глобальные настройки. http://docwiki.embarcadero.com/Libra....StrToDateTime http://docwiki.embarcadero.com/Libra...FormatSettings Последний раз редактировалось Avazart; 09.03.2018 в 20:41. |
10.03.2018, 01:53 | #5 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,894
|
|
10.03.2018, 02:06 | #6 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,894
|
Собственно и в гораздо более ранних версиях Дельфи можно было менять "локальные" настройки. Ну разве что это было чуть сложнее.
|
10.03.2018, 08:24 | #7 | |
Пользователь
Регистрация: 15.11.2014
Сообщений: 75
|
Я и упоминал, только достаточно завуалированно, т.к. не разобрался с тем, что:
Цитата:
Aliens_wolfs, благодарю. Добавлено позже Aliens_wolfs, выдает ошибку: '4.Март.2018 13:10' не является верным датой / временем. Отсюда вопрос, что ему не нравится? 1. Не понял, зачем так: array [0..12] of string = ((''), когда можно указать [1..12] и не ставить пустое значение. 2. Поменял formatDateTime('dd.mm.yy hh:mm', StrToDateTime(str)) на FormatDateTime('d.mmmm.yyyy hh:nn', StrToDateTime(Str)), т.к. в примере не сокращенные имена месяцев, а полные, а вот дни без первого нуля и год не двумя цифрами обозначается, а всеми четыремя. 3. Спасибо, но обратная функция не нужна (перевод из TDateTime в подобный формат), т.к. вся дальнейшая работа работа с этими данными будет уже в родном для дельфина формате, а выводится обратно будет с учетом региональных настроек компьютера конкретного пользователя. Еще чуть подумал Вот этого делать не надо: Код:
Код:
Последний раз редактировалось exyl; 10.03.2018 в 10:02. |
|
10.03.2018, 20:12 | #8 | ||||
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
Цитата:
Цитата:
Да и вообще я делал для примера, что бы вы сами для себя сделали нужное вам преобразование Цитата:
Цитата:
Тем не менее, нужно сказать несколько слов о работе с массивами, индексация которых начинается с нуля. Во-первых, очень часто в API-интерфейсах операционных систем Windows и Linux, а также Delphi-библиотеках VCL и CLX предполагается, что первый элемент в массиве имеет индекс 0. Кроме того, в языках программирования С, С++ и Java индексация всех массивов обязательно начинается с 0. Поскольку и Windows, и Linux реализованы на С (или С++), при вызове API-функций считается, что индекс первого элемента массива равен 0. Во-вторых, индексация динамических массивов начинается с 0. Поэтому, если вы хотите использовать этот очень гибкий тип, начинайте нумерацию элементов массивов с 0. Далее подробно почитайте здесь https://it.wikireading.ru/34874 Тогда уж сделайте так Код:
Последний раз редактировалось Aliens_wolfs; 10.03.2018 в 23:03. |
||||
11.03.2018, 10:31 | #9 | ||||||
Пользователь
Регистрация: 15.11.2014
Сообщений: 75
|
А самому код попробовать? Неужели другая ошибка вылезет? Ладно, объясню. Получается она из-за странной операции:
Цитата:
Цитата:
Цитата:
Далее, Цитата:
Цитата:
Кроме того, я не использую ни Win API, ни C-подобные языки, ни Яву, ни фортран, ни машинные коды, только Дельфи. Цитата:
Так что не нужно быть столь категоричным в своих высказываниях. |
||||||
11.03.2018, 12:41 | #10 | ||
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
Цитата:
С опытом вы поймете, когда начнутся проблемы с индексацией в других проектах и ошибки, но для данного примера согласен что можно оставить так ка вы с 1 но все же привыкайте к правильности. Часть статьи по поводу индексации массивов я взял от сюда https://it.wikireading.ru/34874 Цитата:
Да и вообще хотел вам показать для примера как сделать свой алгоритм конвертации даты) Вот сделал более универсальный Код:
Последний раз редактировалось Aliens_wolfs; 11.03.2018 в 13:22. |
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ввод строки в СС16 и перевод в СС10 и вывод введеной строки после перевода с СС10 | alexey961 | Помощь студентам | 1 | 09.10.2013 10:00 |
Перевод строки | Waqq | Помощь студентам | 0 | 25.09.2011 18:02 |
Перевод строки | BaSoff | Общие вопросы C/C++ | 1 | 12.04.2010 18:58 |
string to TDateTime | NieL | Общие вопросы Delphi | 2 | 30.03.2009 18:43 |
Variant в TDateTime | SoLL | Общие вопросы Delphi | 2 | 13.02.2009 11:49 |