关于PostgreSQL中日期格式的区域设置混淆

时间:2011-12-08 12:27:43

标签: delphi postgresql delphi-7 regional-settings

我正在开发一个需要以下区域设置的应用程序(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中所示)!

enter image description here

检查图像。

enter image description here

我触发查询以从表中获取日期

                    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 个答案:

答案 0 :(得分:1)

DateToStr使用ShortDateFormat作为输出格式。你最初没有从MM/dd/yy设置改变它;你只改变了DateSeparator

我很困惑,关于你为什么要使用(Fields(1).Text)(是吗?对于字段下标而言是圆括号而不是[])。

如果数据库配置为使用|作为日期分隔符,因为它显示在屏幕图像中,为什么使用DateToStr.Text似乎以您希望获取的格式获取信息。

答案 1 :(得分:1)

好吧,我在一个网站上找到了 enter link description here 为了获得适当的格式,我所要做的就是将查询视为一个问题      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;

这给了我想要的格式的正确结果