Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 为什么TFormatSettings使用不正确的ShortTimeFormat?_Delphi_Time_Delphi 10.1 Berlin - Fatal编程技术网

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
副本。