【问题标题】:How to get correct DateSeparator in Delphi 5?如何在 Delphi 5 中获得正确的 DateSeparator?
【发布时间】:2017-03-09 06:22:24
【问题描述】:

当系统区域设置为 Cenz Republic 时,我正在尝试获取正确的 DateSeparator。当前日期的格式为9.3.2017,但DateSeparator 始终为'/' 而不是'.'。如何获得正确的日期分隔符?

【问题讨论】:

  • 你能展示一点MVCE吗
  • 我的设置:控制面板->地区和语言->格式->捷克共和国。现在短日期格式是 d.M.yyyy 这里分隔符是 .但是当我把日期分隔符放在像 Messagebox(dateseparator) 这样的消息框中时;并运行它,它将显示“/”(这是日期分隔符的默认分隔符)而不是“。”作为分隔符
  • DateSeparator 根据GetLocaleInfo() for LOCALE_SDATE 被初始化为用户当前区域设置的任何内容。
  • 由于DateSeparator是D5中的一个全局变量,它可以被你程序的其他部分改变。
  • minimal reproducible example 表示某人更有可能帮助您。当然如果不是真的需要帮助....

标签: delphi delphi-5


【解决方案1】:

关于日期表示,有几个单独的全局变量会影响输出。你提到了其中两个:

`DateSeparator: Char;` (initialized from registry with reference `LOCALE_SDATE`)
`ShortDateFormat: string;` (initialized from registry with reference `LOCALE_SSHORTDATE`)

从第 490 行开始,您可以在文档或单元 SysUtils 的代码中看到其他内容(在 Delphi 7 中,在 Delphi 5 中可能不同)。

由于DateSeparatorShortDateFormat 是单独的变量,您可能会看到根据您的语言环境正确显示的日期,而DateSeparator 返回一个错误字符。

要更正,您可以在代码中自己将正确的字符分配给DateSeparator,但请注意,如果您使用的是第三方库,他们可能也想更改它。

【讨论】:

  • DateSeparator 在我的古董 D5 sysutils 的第 465 行。好答案,+1
  • 我认为 Delphi 5 不支持采用 TFormatSettings 记录的函数。一切都使用共享的全局变量。
  • 问题问为什么变量不保持预期值。这就是被问到的问题,也是需要回答的问题。
  • @David 问题问如何获得正确的日期分隔符? 这以及为什么,是我试图回答的问题(目前正在验证我的第二点是否是垃圾)
  • @TomBrunberg:我在 D5 源代码的任何地方都看不到过载,也看不到任何 TFormatSettings 迹象。我猜 TFormatSettings 一定是后来添加的。在那个时代,我自己总是使用 SysTools 日期和时间例程而不是内置的例程。这是唯一的代码,因为我记得没有 y2k 担心。
猜你喜欢
  • 1970-01-01
  • 2015-12-24
  • 2021-12-25
  • 2014-03-05
  • 1970-01-01
  • 2021-06-29
  • 2018-12-23
  • 1970-01-01
  • 2016-03-11
相关资源
最近更新 更多