Вниз
Скачать: CL | DM;

Странное поведение ShortDateFormat   Найти похожие ветки 

 
Andrey Prokopovich   (2006-11-23 23:28) [0]

Подскажите пожалуйста, как решить следующую проблему:

Имеется приложение интенсивно использующее переменые типа TDateTime и соответственно операции конвертирования DateTime в String.
При инициализации приложения устанавливаю глобальные переменные:
DateSeparator := "-";
ShortDateFormat := "yyyy/mm/dd";

Но в процессе работы программы без какой либо выявленной закономерности ShortDateFormat иногда принимает значение "dd.MM.yyyy".
Может ли windows влиять на эти переменные в приложении? Рассылая сообщения или еще как-то... Если, да, то как с этим бороться?

Заранее спасибо!


 
KilkennyCat ©   (2006-11-24 00:29) [1]

> как с этим бороться?

ну, перед каждым использованием вызвать заново установку формата.... хотя я такого глюка не встречал.


 
Anatoly Podgoretsky ©   (2006-11-24 00:32) [2]

> KilkennyCat  (24.11.2006 0:29:01)  [1]

Бывает в посторонних компонентах, они точно также меняют и не восстанавливают, или скажем ProcessMessages


 
KilkennyCat ©   (2006-11-24 00:54) [3]

> Anatoly Podgoretsky ©   (24.11.06 00:32)

Да, я потом тоже подумал о processmessages


 
Германн ©   (2006-11-24 01:08) [4]


> как с этим бороться?

Я предпочитаю пользоваться функцией FormatDateTime всегда.


 
Andrey Prokopovich   (2006-11-24 01:33) [5]


> Я предпочитаю пользоваться функцией FormatDateTime всегда.

Именно ей я и пользуюсь, но проблема несколько глубже (исключение возникает при попытке конвертирования строки в дату в компоненте бд)

FormatDateTime("d.mm.yy h:mm", IBQuery1.FieldByName("FIELDNAME").AsDateTime)
поле БД "FIELDNAME" типа string


 
Германн ©   (2006-11-24 01:38) [6]


> но проблема несколько глубже (исключение возникает при попытке
> конвертирования строки в дату в компоненте бд)

Ну а почему не написал этого в сабже? Этож совсем другой коленкор!


 
Andrey Prokopovich   (2006-11-24 01:48) [7]


> а почему не написал этого в сабже?

Сорри.
Дык, все работает 99% времени, но в один прекрасный момент ShortDateFormat вдруг принимает значение "dd.MM.yyyy". И всё. Полазил по исходникам используемых компонент, вроде нигде они не меняют.

Кстати, а каким боком тут ProcessMessages, расскажите плиз.


 
Германн ©   (2006-11-24 01:56) [8]


> Сорри.
> Дык, все работает 99% времени, но в один прекрасный момент
> ShortDateFormat вдруг принимает значение "dd.MM.yyyy". И
> всё. Полазил по исходникам используемых компонент, вроде
> нигде они не меняют.
>
> Кстати, а каким боком тут ProcessMessages, расскажите плиз.
>
>

Из справки:
The SysUtils unit includes a number of variables that are used by various formatting routines. Values are assigned to these variables to define the formats of numeric and date/time strings. The initial values of these variables are fetched from the system registry using the GetLocaleInfo function in the Win32 API. VCL (non-console) applications automatically update these formatting variables in response to WM_WININICHANGE messages. The Application variable’s UpdateFormatSettings method either allows or disallows changes in system settings. The default is True. Set this property to False to prevent the system settings from changing.


 
Anatoly Podgoretsky ©   (2006-11-24 07:38) [9]

> Andrey Prokopovich  (24.11.2006 1:48:07)  [7]

При том, что после него может быть выполнено что угодно.


 
Andrey Prokopovich   (2006-11-24 10:25) [10]


> The Application variable’s UpdateFormatSettings method either
> allows or disallows changes in system settings

Вот, это оно! А казалось, что искал везде :)
Всем Спасибо, за ответы.


 
Loginov Dmitry ©   (2006-11-24 15:05) [11]

Такая же беда была на работе с DecimalSeparator. Ставлю точку. Некоторое время работает, потом бах - и становится как в винде - ",". Лечится установкой разделителя в винде с помощью функции SetLocaleInfo при запуске приложения.


 
Andrey Prokopovich   (2006-11-24 22:59) [12]


> Лечится установкой разделителя в винде с помощью функции
> SetLocaleInfo при запуске приложения

Уж лучше по аналогии с UpdateFormatSettings при инициализации программы установить: Application.UpdateMetricSettings := False



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.031 c
6-1155734845
VolanD666
2006-08-16 17:27
2007.01.14
Asynchronous socket error 10061


1-1164182036
DelphiLexx
2006-11-22 10:53
2007.01.14
DBGridEh и его Title


2-1166641119
Signate
2006-12-20 21:58
2007.01.14
Манипуляции с TSocket...


15-1166626822
kroner
2006-12-20 18:00
2007.01.14
Кто-нибудь знает, есть ли XML SDK для 6 версии?


15-1166783106
Gero
2006-12-22 13:25
2007.01.14
Зацените дизайн




   Наверх