Правильное форматирование даты

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Правильное форматирование даты

Сообщение wwswowsogon » 19.11.2020 10:25:38

Всем доброго времени суток!

Внезапно столкнулся с проблемой - на некоторых (как минимум) версиях Win 10 по умолчанию стоит другой формат даты, из-за чего DateToStr возвращает значение вида Пн 16.11.2020 вместо 16.11.2020. К сожалению, от этого не помогает даже
Код: Выделить всё
FormatDateTime('dd.mm.yyyy', Now)
, результат тот же самый. Лучшее решение, которое я нашёл, это выставить соответствующий формат даты в региональных настройках Винды.

Есть идеи, может быть, есть более изящное решение на уровне кода?
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Правильное форматирование даты

Сообщение Снег Север » 19.11.2020 10:52:39

Выставлять значение ShortDateFormat в FormatSettings в каждом юните, где вам нужна дата в символьном виде. Я взял за правило это делать в своих программах и давно не знаю проблем. Заодно выставляю DecimalSeparator точкой.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Правильное форматирование даты

Сообщение zub » 19.11.2020 10:57:07

какой смысл делать это в каждом юните?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Правильное форматирование даты

Сообщение SSerge » 19.11.2020 11:13:01

zub писал(а):какой смысл делать это в каждом юните?


Снег Север писал(а):в каждом юните, где вам нужна дата в символьном виде


Добавлено спустя 1 минуту 20 секунд:
...это на случай, когда юнит потащите в другой проект. Чтобы не перекосило.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Правильное форматирование даты

Сообщение Снег Север » 19.11.2020 12:37:16

SSerge писал(а):...это на случай, когда юнит потащите в другой проект. Чтобы не перекосило.

В общем - да. Ставлю это в секции инициализации юнита, Я часто использую "рефракторинг", перетаскивая из проекта в проект удобные решения. Не всегда нужно своё форматирование, иногда наоборот, надо выводить в системном формате пользователя.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Правильное форматирование даты

Сообщение olegy123 » 19.11.2020 13:17:37

wwswowsogon писал(а):Лучшее решение, которое я нашёл, это выставить соответствующий формат даты в региональных настройках Винды.

Это правильное решение.
что будет если вы решите на том компутере поработать с БД? там тоже же придется в миллион строк переделывать дату?

Добавлено спустя 6 минут 25 секунд:
подключать ексель

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

Возможно есть у виндовс способ настроить свое окружение, как это есть в линуксе, изменить системные параметры только для запуска программы?

Добавлено спустя 2 минуты 48 секунд:
по опыту знаю чтобы сделать конвертацию данных в программе - сервис-службе Windows пришлось менять настройки отображения для юзера System
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Правильное форматирование даты

Сообщение Снег Север » 19.11.2020 14:30:59

olegy123 писал(а):Это правильное решение.

Конечно же - нет. Намек - на компе не одна единственная программа запускается, как правило.

olegy123 писал(а):что будет если вы решите на том компутере поработать с БД? там тоже же придется в миллион строк переделывать дату?

Про форматирование в запросе, про параметры даты на сервере и прочие вещи вы, явно, не слыхали... Или вы ни с чем кроме dbf, не работали.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Правильное форматирование даты

Сообщение Seenkao » 19.11.2020 15:10:20

wwswowsogon, сделай проверку и удали из строки то, что не нужно.
Seenkao
энтузиаст
 
Сообщения: 502
Зарегистрирован: 01.04.2020 03:37:12

Re: Правильное форматирование даты

Сообщение zub » 20.11.2020 09:40:28

>>...это на случай, когда юнит потащите в другой проект. Чтобы не перекосило.
Вот твк дернеш в проект 2 унита, в одном в инициализации будет точка, в другом запятая. И будешь зависеть от того в какой последовательности в uses их вбил
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Правильное форматирование даты

Сообщение Снег Север » 20.11.2020 10:02:47

zub писал(а):в одном в инициализации будет точка, в другом запятая

Поэтому внутри программы надо всегда придерживаться строго одного единственного варианта представления дат и чисел, а преобразования вывода в символьной форме вести только в нужных местах.
Ваш Кэп.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Правильное форматирование даты

Сообщение zub » 20.11.2020 10:46:34

Не факт. Некоторые программы поддерживают разные форматы данных. например dxf - разделитель только точка, а пользователь с детства привык на экране видеть запятую. вот дилема, как мне расположить uses MyDXFImplementation, MyUI; или наоборот?
Не Ваш КЭП.
Вроде взрослый мужик, папиросы курит, а не понимает что программы бывают сложнее хеловорда, иногда чужой код приходится использовать (там вообще черт ногу сломит)
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Правильное форматирование даты

Сообщение Снег Север » 20.11.2020 13:04:08

zub писал(а): как мне расположить uses MyDXFImplementation, MyUI; или наоборот?

Вы покупаете или продаете? :D В смысле - читаете данные в текстовом формате или выводите? Конечно, это разные задачи и решаются по-разному.
Ну вот есть меня программа, которая парсит данные с кучи сайтов с зоопарком представления дат и чисел и сводит их в БД. Для этого, конечно, нужно иметь десятка два своих процедур конвертации и проверки, стандартными никак не обойтись. Но и там у меня настройки системы полностью игнорируются.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Правильное форматирование даты

Сообщение wwswowsogon » 20.11.2020 22:01:50

Снег Север писал(а):Выставлять значение ShortDateFormat в FormatSettings в каждом юните, где вам нужна дата в символьном виде.


Спасибо, не знал о таком параметре.

Seenkao писал(а):wwswowsogon, сделай проверку и удали из строки то, что не нужно.


Тоже об этом думал, но это чревато неожиданными проблемами.

Вообще, всем спасибо за информацию.

Думаю, остановлюсь на варианте Снег Севера. Про DecimalSeparator с недавних пор уже знаю, его в файл проекта - и никаких проблем. :)
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Правильное форматирование даты

Сообщение olegy123 » 21.11.2020 03:55:09

Снег Север писал(а):Про форматирование в запросе, про параметры даты на сервере и прочие вещи вы, явно, не слыхали... Или вы ни с чем кроме dbf, не работали.
Вы явно не работали с системами которые не особо спрашивают как подавать данные. Пример тот же Excel, XML,XSLT,JSON
короче Данные <-> Текст <-> Данные <-> Текст <->..
Все происходит на автомате, тот же самый XSLT вообще не предполагает правку текста.
Вот представте себе что какая то падла решила формат даты по своему написать, или вообще дату в вид строки оформить, при этом часть по одному формату, а часть по другому..
Мне еще попадались базы в которых при CP1251 умудрились вставить UTF-8
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Правильное форматирование даты

Сообщение Снег Север » 21.11.2020 09:58:10

olegy123 писал(а):Вы явно не работали с системами которые не особо спрашивают как подавать данные.

Работал. Я выше писал, что брал данные с сайтов, а там дата могла быть в виде "Samedi 20 décembre 2014" и числа в виде "10.5 Mln". Но это уже совершенно иная проблема, чем у топикстартера.
ЗЫ. И неюникодовские базы MySQL с юникодовскими данными попадались не раз и не два. Ничего особенного, кстати - в поля varbinary можно что угодно загнать и правильно потом прочитать. Но, конечно, с изначальной юникодовской базой работать комфортнее.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Alex2013, Google [Bot], Yandex [Bot] и гости: 25

Рейтинг@Mail.ru