Путаница в региональных настройках формата даты из PostgreSQL

Я работаю над приложением, которое требует следующих региональных настроек (Delphi 7 и PostgreSQL 9.0):

   1. DateSeparator:='/';
   2. TimeSeparator:=':';
   3. ThousandSeparator:=',';
   4. DecimalSeparator:='.';
   5. ShortDateFormat:='MM/dd/yy';
   6. ShortTimeFormat:='hh:mm:ss';

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

В OnCreate формы я установил вышеупомянутые разделители, и мои текущие системные разделители:

   1. DateSeparator='|';
   2. TimeSeparator='|';
   3. ThousandSeparator='|';
   4. DecimalSeparator='|';

(Это для целей теста.)

Теперь в Postgres у меня есть таблица, из которой я получаю даты для отображения в моем приложении, но каким-то образом разделитель даты, похоже, не работает (как видно из label1)!

введите описание изображения здесь

Проверьте изображение.

введите описание изображения здесь

Я запускаю запрос, чтобы получить даты из таблицы

                    Label1.Caption:=(Fields(1).Text);
                    Label2.Caption:=datetostr(Fields(1).Data) ;

Запрос

 select min(dat), max(dat) from diary where survey in (2008401) and event not in ('E','C','R') and region=6100;

Теперь та же самая дата, если я принимаю как.data, отличается в разделителе даты от.text dateseparator, почему это происходит?

Почему региональные настройки не применяются к label1.caption (как показано на рисунке)?

2 ответа

Решение

Хорошо, я нашел на одном сайте, введите ссылку здесь, чтобы получить соответствующий формат, все, что мне нужно было сделать, это получить запрос как

select to_char(min(dat),'mm/dd/yy'), to_char(min(dat),'mm/dd/yy') from diary where survey in (2008401) and event not in ('E','C','R') and region=6100;

Это дало мне правильный результат в формате, который я хотел

DateToStr использования ShortDateFormat в качестве выходного формата. Вы не изменили это от MM/dd/yy установить изначально; вы только изменили DateSeparator,

Я смущен тем, почему вы хотите использовать (Fields(1).Text) (это верно? Скобки вместо [] для индекса Fields?).

Если БД настроена на использование | в качестве разделителя даты, как это видно из вашего изображения на экране, почему вы используете DateToStr? Похоже, что .Text получает информацию в формате, который вы хотите получить.

Другие вопросы по тегам