TFormatSettings.Create('en-US') returns 不同平台设置不同
TFormatSettings.Create('en-US') returns different settings on different platforms
TFormatSettings.Create('en-US')
returns 与 ShortDateFormat = 'm/d/yy'
在 Android 但 returns 与 ShortDateFormat = 'M/d/yyyy'
在 Windows 上?这是一个错误吗?我在想设置必须与平台一致。
TFormatSetting
尽可能使用平台特定的设置,即使跨平台使用相同的语言环境也是如此。
在所有平台上,TFormatSettings.Create(LocaleName)
将 LocalName
转换为平台特定的 TLocaleID
,然后调用 TFormatSettings.Create(LocaleID)
。
在 Windows 上,LocaleName
在 Vista 及更高版本上通过 LocaleNameToLCID()
转换为 TLocaleID
(可惜 LCID
),并且 EnumSystemLocales()
在早期版本上。 'en-US'
的 LCID
是 1033。如果 Win32 API GetLocaleInfo()
函数不 return a [=24=,则 'm/d/yy'
是 RTL 的默认值] 指定 LocaleID
的字符串。在您的系统上,Windows 为 LCID 1033 returning 'M/d/yyyy'
,因此不使用 RTL 的默认值。
在Android上,RTL使用的底层本地化库是跨平台的ICU库,所以LocalName
通过简单编码为UTF转换为TLocaleID
-8 然后按原样使用它。 'm/d/y'
是 RTL 的默认值,如果 ICU 没有 return 指定 LocaleID
的 UDAT_SHORT
字符串。在您的系统上,ICU returning 'm/d/yy'
for 'en-US'
,因此不使用 RTL 的默认值。
TFormatSettings.Create('en-US')
returns 与 ShortDateFormat = 'm/d/yy'
在 Android 但 returns 与 ShortDateFormat = 'M/d/yyyy'
在 Windows 上?这是一个错误吗?我在想设置必须与平台一致。
TFormatSetting
尽可能使用平台特定的设置,即使跨平台使用相同的语言环境也是如此。
在所有平台上,TFormatSettings.Create(LocaleName)
将 LocalName
转换为平台特定的 TLocaleID
,然后调用 TFormatSettings.Create(LocaleID)
。
在 Windows 上,LocaleName
在 Vista 及更高版本上通过 LocaleNameToLCID()
转换为 TLocaleID
(可惜 LCID
),并且 EnumSystemLocales()
在早期版本上。 'en-US'
的 LCID
是 1033。如果 Win32 API GetLocaleInfo()
函数不 return a [=24=,则 'm/d/yy'
是 RTL 的默认值] 指定 LocaleID
的字符串。在您的系统上,Windows 为 LCID 1033 returning 'M/d/yyyy'
,因此不使用 RTL 的默认值。
在Android上,RTL使用的底层本地化库是跨平台的ICU库,所以LocalName
通过简单编码为UTF转换为TLocaleID
-8 然后按原样使用它。 'm/d/y'
是 RTL 的默认值,如果 ICU 没有 return 指定 LocaleID
的 UDAT_SHORT
字符串。在您的系统上,ICU returning 'm/d/yy'
for 'en-US'
,因此不使用 RTL 的默认值。