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 指定 LocaleIDUDAT_SHORT 字符串。在您的系统上,ICU returning 'm/d/yy' for 'en-US',因此不使用 RTL 的默认值。