【发布时间】:2015-07-30 08:17:59
【问题描述】:
我希望根据系统的格式设置获取日期分隔符。
在 Delphi 中我使用 System.SysUtils.TFormatSettings.DateSeparator,在 C 中有类似的东西吗?
【问题讨论】:
我希望根据系统的格式设置获取日期分隔符。
在 Delphi 中我使用 System.SysUtils.TFormatSettings.DateSeparator,在 C 中有类似的东西吗?
【问题讨论】:
C 语言和标准库不提供任何此类信息。可以从您所针对的任何系统获取此信息。你如何做到这一点取决于你的目标系统。
【讨论】:
GetLocaleInfoEx。正如 harald 所说,在 Linux 上你会使用 POSIX 函数。
虽然正如其他答案所述,C 标准不提供此信息是正确的,但 posix 提供。因此,在任何 posix 兼容系统上,您都可以使用 nl_langinfo api 来获取语言环境信息。
虽然您不会得到日期分隔符,但strftime 可以使用日期格式来显示区域设置的正确格式日期。如果这是您真正需要的,您始终可以解析它以获取日期分隔符,但对于大多数用途而言,实际日期格式可能会更有用。
Posix 对 Windows 的支持是不稳定的,因此您可能必须以不同的方式对待它,但对于几乎任何其他平台,这应该对您有所帮助。
【讨论】:
C 语言和标准库不提供任何此类 信息。该信息可以从您所使用的任何系统中获取 正在定位。
感谢您的澄清,目标可以是 linux 和 windows。在那些情况下,我问的怎么办?
不同的操作系统需要不同的功能。
例如
GetDataSeparator()
{
#ifdef _WIN32
Here goes implementation for Windows
#else
May be more preprocessor commands and implementations for Linux/Mac
#endif
}
不确定我是否正确理解了所有内容。
对于 Windows,您可以解析在 HKCU\Control Panel\International 中找到的值。对于 Linux,this link 可能会有所帮助。
【讨论】:
_WIN 没有定义,这并不奇怪。这不是一个已知的条件。