【问题标题】:How to get DateSeparator in C如何在 C 中获取 DateSeparator
【发布时间】:2015-07-30 08:17:59
【问题描述】:

我希望根据系统的格式设置获取日期分隔符。 在 Delphi 中我使用 System.SysUtils.TFormatSettings.DateSeparator,在 C 中有类似的东西吗?

【问题讨论】:

    标签: c date format separator


    【解决方案1】:

    C 语言和标准库不提供任何此类信息。可以从您所针对的任何系统获取此信息。你如何做到这一点取决于你的目标系统。

    【讨论】:

    • 这是一个不同的问题。在 Windows 中,您将使用 GetLocaleInfoEx。正如 harald 所说,在 Linux 上你会使用 POSIX 函数。
    • 没有。你要求用 C 来做。这里指的是标准化语言及其库。
    • 我试图向你解释在这个网站上询问 C 语言是否可行的含义。仅此而已。这个问题仍然要求一个纯 C 的答案。我有一种感觉,你没有完全掌握这个网站的所有细节。看看UDF问题怎么样?
    • 只有两个问题。一个用于 Windows,一个用于 Linux。
    【解决方案2】:

    虽然正如其他答案所述,C 标准不提供此信息是正确的,但 posix 提供。因此,在任何 posix 兼容系统上,您都可以使用 nl_langinfo api 来获取语言环境信息。

    虽然您不会得到日期分隔符,但strftime 可以使用日期格式来显示区域设置的正确格式日期。如果这是您真正需要的,您始终可以解析它以获取日期分隔符,但对于大多数用途而言,实际日期格式可能会更有用。

    Posix 对 Windows 的支持是不稳定的,因此您可能必须以不同的方式对待它,但对于几乎任何其他平台,这应该对您有所帮助。

    【讨论】:

      【解决方案3】:

      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 可能会有所帮助。

      【讨论】:

      • 不要破解注册表。使用 API。
      • 注册只是一个建议,不知道实际的API。
      • 这是一个非常糟糕的建议。不要这样做。
      • 总是执行“else”中的代码(在 Windows 64 位上测试)。建议的 ifdef 条件是否正确?
      • 执行不如编译。 #ifdef 由预处理器评估。显然_WIN 没有定义,这并不奇怪。这不是一个已知的条件。
      猜你喜欢
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多