![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 | |
Пользователь
Регистрация: 15.11.2014
Сообщений: 75
|
![]()
Добрый день.
Раньше не вникал в нюансы перевода вышеуказанных типов, а тут понадобилось переводить даты вида Цитата:
Итак, есть замечательная функция StrToDateTime. Есть компухтер с русской локализацией Виндовз. Уже проблемка. Месяц-то на английском. Ок, сделал вариант "в лоб": Код:
Далее все равно ловлю ошибку перевода. Я догадываюсь, что строки: Код:
И, наконец, третий (возможно главный) вопрос: а как это правильнее решить задачу перевода подобных строк в TDateTime? Ну то есть и айфоном можно гвозди в стену вбивать, но молотком вроде правильнее. |
|
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]() Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 09.03.2018 в 18:49. |
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
![]()
Вот накидал процедуру конвертации из вашей строки
Код:
Код:
Последний раз редактировалось Aliens_wolfs; 09.03.2018 в 20:19. |
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#5 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,926
|
![]() |
![]() |
![]() |
![]() |
#6 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,926
|
![]()
Собственно и в гораздо более ранних версиях Дельфи можно было менять "локальные" настройки. Ну разве что это было чуть сложнее.
|
![]() |
![]() |
![]() |
#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. |
|
![]() |
![]() |
![]() |
#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. |
||||
![]() |
![]() |
![]() |
#9 | ||||||
Пользователь
Регистрация: 15.11.2014
Сообщений: 75
|
![]()
А самому код попробовать? Неужели другая ошибка вылезет? Ладно, объясню. Получается она из-за странной операции:
Цитата:
Цитата:
Цитата:
Далее, Цитата:
Цитата:
Кроме того, я не использую ни Win API, ни C-подобные языки, ни Яву, ни фортран, ни машинные коды, только Дельфи. Цитата:
Так что не нужно быть столь категоричным в своих высказываниях. |
||||||
![]() |
![]() |
![]() |
#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 |