【问题标题】:Delphi & ADO: datetime to string conversionDelphi & ADO:日期时间到字符串的转换
【发布时间】:2023-03-07 15:07:01
【问题描述】:

我使用 Delphi 2006 和 ADO 连接到 MS Access 数据库。我检索的一些字段是日期字段(在 Access 中,格式为“中日期”,即 2010 年 4 月 20 日)但是我必须将它们作为字符串检索:

FValue:=FAccessADOQuery.Fields.FieldByName(FIELD_NAME).AsString;

然后字段的格式如下:4/20/2010。

我的问题是:这种格式是什么时候发生的,我该如何自定义它?是 ADO 设置(在那里找不到任何东西)还是操作系统(我使用带有美国语言环境的 Win XP ENG)?或者是德尔福?

谢谢! 娄

【问题讨论】:

  • 如果您获得的是 2010 年 4 月 20 日,这就是用户的区域设置所要求的。这将与 Windows 资源管理器中的详细视图相同。理想情况下,您应该尊重(或尊重)这些设置,除非您正在为另一个需要特定格式的系统创建输入。区域设置在控制面板的“区域和语言”部分中设置(在 XP 中)。但是,在 Win7 中有一个已知的错误会导致此问题。参考blogs.msdn.com/b/michkap/archive/2010/03/19/9980203.aspx

标签: delphi date ado


【解决方案1】:

ShortDateFormatLongTimeFormat 变量用于将 TDateTimeField 格式化为字符串。

您可以更改这些变量的值或尝试不同的方法:

Dt :TDateTime;
Ds :String;
begin
//FAccessADOQuery.Fields.FieldByName(FIELD_NAME).AsString
Dt:=FAccessADOQuery.Fields.FieldByName(FIELD_NAME).AsDateTime;
Ds:=FormatDateTime('dd-mmm-yyyy',dt);
end;

【讨论】:

  • 我认为 FormatDateTime 函数的参数顺序是错误的 ;)
【解决方案2】:

好的,刚刚找到。它是 delphi 常规设置(如果缺少,则这些值取自操作系统):

DateSeparator   := '-';
ShortDateFormat := 'dd-mmm-yyyy';

现在返回值是“20-Apr-2010”。

【讨论】:

    【解决方案3】:

    您可以将 Value 作为 DateTime 检索并使用此函数将其转换为您的格式

    FValue:=FAccessADOQuery.Fields.FieldByName(FIELD_NAME).AsDateTime;

    function DateToMediumDate(const Date: TDate): string;
    var
      y, m, d: Word;
    begin
      DecodeDate(Date, y, m , d);
    
      Result := Format('%d-%s-%d', [d, ShortMonthNames[m], y]);
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-17
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多