Delphi 为什么TFormatSettings使用不正确的ShortTimeFormat?
经过几个小时的调查和研究,我发现Delphi 为什么TFormatSettings使用不正确的ShortTimeFormat?,delphi,time,delphi-10.1-berlin,Delphi,Time,Delphi 10.1 Berlin,经过几个小时的调查和研究,我发现t格式设置返回的ShortTimeFormat不正确 要在TDateTimePicker中显示支持24小时的短时间格式,我需要使用:TDateTimePicker.format:='H:mm',这是我在Windows 10中短时间内配置文件的默认设置 但是t格式设置.ShortTimeFormat返回我一个值'h:mm' 要获得正确的值,我应该使用: GetLocaleStr(LOCALE\u USER\u默认值,LOCALE\u SSHORTTIME,”);
t格式设置
返回的ShortTimeFormat
不正确
要在TDateTimePicker
中显示支持24小时的短时间格式,我需要使用:TDateTimePicker.format:='H:mm'
,这是我在Windows 10中短时间内配置文件的默认设置
但是t格式设置.ShortTimeFormat
返回我一个值'h:mm'
要获得正确的值,我应该使用:
GetLocaleStr(LOCALE\u USER\u默认值,LOCALE\u SSHORTTIME,”);
这将返回一个'H:mm'
值
这是来自SysUtils.pas
的t格式设置的来源:
TimePrefix:='';
时间后缀:='';
如果strotintdef(GetLocaleStr(Locale,Locale_ITLZERO,'0'),0)=0,则
小时格式:='h'
其他的
小时格式:='hh';
如果strotintdef(GetLocaleStr(Locale,Locale_ITIME,'0'),0)=0,则
如果strotIntdef(getLocaleEstr(Locale,Locale_ITIMEMARKPOSN,'0'),0)=0,则
时间后缀:=“AMPM”
其他的
时间前缀:='AMPM';
Result.ShortTimeFormat:=TimePrefix+HourFormat+':mm'+TimePostfix;
Result.LongTimeFormat:=TimePrefix+HourFormat+':mm:ss'+TimePostfix;
我们可以看到,总是使用'h'
或'hh'
,无法获得'h'
或'hh'
我的问题是:为什么?首先,Rio没有发生任何变化,然后是:>它完全忽略了LOCALE\u SSHORTTIME和LOCALE\u stimforma为什么是因为有一个bug(在您发布的代码中可以清楚地看到)。我们无法修复Delphi RTL中的错误,因为这是如此,而不是EMBT。正如@FredS在错误报告链接中指出的那样,该错误仍然存在于里约。您可以等待来自EMBT的修复(可能在下一版本中,可能不会)或者在应用程序启动时创建您自己的TFormatSettings,并按您希望的方式进行设置。或者您可以将System.SysUtils.pas
的副本添加到项目中,然后自己修改错误实现,使TFormatSettings
做正确的事情。然后,如果/当EMBT最终正确修复它时,您可以从项目中删除System.SysUtils.pas
副本。