TFormatSettings.Create('en-US')
在 Android 上以ShortDateFormat = 'm/d/yy'
返回,但在 Windows 上返回ShortDateFormat = 'M/d/yyyy'
,这是正常的吗?这是一个错误吗?我当时认为设置必须与平台保持一致。
答案 0 :(得分:5)
TFormatSetting
尽可能使用特定于平台的设置,即使跨平台使用相同的区域设置也是如此。
在所有平台上,TFormatSettings.Create(LocaleName)
将LocalName
转换为特定于平台的TLocaleID
,然后调用TFormatSettings.Create(LocaleID)
。
在Windows上,LocaleName
在Vista及更高版本上通过TLocaleID
转换为LCID
(唉LocaleNameToLCID()
),在早期版本中转换为EnumSystemLocales()
。 LCID
的{{1}}为1033.如果Win32 API 'en-US'
函数未返回指定{{1}的'm/d/yy'
字符串,则GetLocaleInfo()
是RTL的默认值}}。在您的系统上,Windows为LCID 1033返回LOCALE_SSHORTDATE
,因此不使用RTL的默认值。
在Android上,RTL使用的底层本地化库是跨平台的ICU库,因此LocaleID
只需将其编码为UTF-8即可转换为'M/d/yyyy'
,然后使用该库原样。如果ICU未为指定的LocalName
返回TLocaleID
字符串,则'm/d/y'
是RTL的默认值。在您的系统上,ICU正在为UDAT_SHORT
返回LocaleID
,因此不会使用RTL的默认值。