覆盖系统日期格式

Dan*_*lly 4 delphi delphi-xe5

在我的应用程序中,我正在从一个数据库读取并写入第二个数据库.该应用程序快速而肮脏,所以我正在使用和查询AsString两者进行读/写.FieldByNameParamByName

这适用于我的所有用例,除了数据类型是DateDateTime

据我所知,FieldByName.AsString使用系统ShortDateTime格式返回日期(在我的情况下)dd/mm/yyyy.数据库期望将日期写为yyyy-mm-dd

根据Delphi Basics,我应该能够设置ShortDateFormat我需要的东西,但似乎在XE5中不再是这种情况(对吗?)

此外挖这里返回 2个使用问题TFormatSettings覆盖本地设置.然而,这两种使用产生FormatSettings在StrToDateFormatDateTime直接.

所以有两个问题

1)我可以告诉我的应用程序覆盖系统ShortDateFormat吗?

2)如果是,如何(如果没有,我有B计划)?

Dav*_*nan 6

对于日期和时间格式使用全局变量是很久以前由原始RTL设计者犯下的错误.依赖于全局格式设置的函数(如单个参数)StrToDate会保留以便向后兼容,但您不应使用它们.

对于日期/时间和字符串之间的转换,您应该:

  1. TFormatSettings使用您的日期格式初始化实例.
  2. 调用两个参数StrToDate,将您TFormatSettings的字符串转换为日期.
  3. 调用FormatDateTime过载,TFormatSettings在另一个方向转换时接受.

现在,问题的主旨.在您描述的场景中,您不应该根据日期和时间使用字符串.使用AsDateTime而不是AsString.如果您碰巧有一个数据库列将日期/时间存储为字符串,那么您应该使用TFormatSettings基于转换的函数来解决该设计错误.

如果你完全没有使用字符串完成这一切,并且我无法说服你,那么你需要使用FormatSettings.ShortDateFormatfrom SysUtils来控制你的短日期格式.