Jes*_*own 2 delphi datetime delphi-xe4 log4d
在尝试让Log4D在XE4中编译时,我看到了
[dcc32错误] Log4D.pas(2139):E2003未声明的标识符:'ShortDateFormat'
在这条线上:
SetOption(DateFormatOpt, ShortDateFormat);
Run Code Online (Sandbox Code Playgroud)
谷歌搜索有一点使我改变的解决方案ShortDateFormat来FormatSettings.ShortDateFormat,这导致了XE4以下编译代码:
SetOption(DateFormatOpt, FormatSettings.ShortDateFormat);
Run Code Online (Sandbox Code Playgroud)
不过,我真的不明白,为什么能解决的事情,为什么它的需要来指定FormatSettings,因为我已经包含SysUtils在我的用途声明,其次,我不知道如何重写这一行继续向后用Delphi的版本兼容这个开源项目已经支持了.
我想我可以在任何版本的Delphi引入的参数或代码行周围添加一个IFDEF FormatSettings- 但我甚至不确定Delphi的版本是什么,更不用说这是解决这个问题的好方法还是坏方法.
全球SysUtils.ShortDateFormat在XE3终于被删除,请参阅Global Variables.
在现代Delphi版本中,FormatSettings也不建议使用全局变量记录.主要原因是它不是线程安全的(旧的全球ShortDateFormat也遭受了).您应该定义自己的TFormatSettings变量,该变量在整个范围内都是一致的.
这也将使您的代码向后兼容.
但是,初始化FormatSetting记录的方式因Delphi版本而异.
在旧版本(D7 +)上使用:
GetLocaleFormatSettings(GetThreadLocale, FormatSettings);
Run Code Online (Sandbox Code Playgroud)
在较新的版本(XE +)中:
FormatSettings := TFormatSettings.Create(GetThreadLocale); // Or one of the overloads
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9812 次 |
| 最近记录: |