【问题标题】:Delphi - Application independent of Regional SettingsDelphi - 独立于区域设置的应用程序
【发布时间】:2012-01-09 10:03:48
【问题描述】:

我需要制作一个独立于区域设置的应用程序(D2006),最重要的是所有日期格式必须相同。

一开始我想用 FormatDateTime('aConstantDefined') 替换所有 FormatDateTime('adateformate')。还 Application.UpdateFormatSettingsApplication.UpdateMetricSettings 应设置为 False。

还有什么我应该采取/改变的吗?

LE:问题是我有两个不同区域设置的用户,他们不想统一他们的设置。我知道这听起来很奇怪,但事实就是这样。所以,这就是我需要让我的应用程序完全独立于区域设置的原因。

【问题讨论】:

  • 就是这样,但是为什么要忽略区域设置呢?这对您的用户不太友好?
  • “独立于区域设置”,你的意思是说你想忽略本地系统日期/时间/小数分隔符?
  • @all - 阅读我的 LE。谢谢。
  • 我理解,但是:他们的意愿是完全合法的,您不应忽略他们选择的设置,尤其是用户界面中的设置。因此,您实际上应该将 FormatDateTime 与“标准”设置字符串之一一起使用(如“dddddd”以获取长日期字符串)。换一种方式(从字符串到日期),您应该使用 StrToDate 函数,该函数可以采用特定格式并将区域设置指定的格式提供给它。
  • 我认为您以错误的方式看待这个问题。用户有充分的理由希望使用他们所在地区的典型地区设置。您需要做的是尊重这些设置。您可以通过以您定义的单一格式存储数据来实现此目的。当您需要显示输出时,使用流行的区域设置将内部格式转换为当前用户希望使用的格式。同样,在接收用户输入时,使用流行的区域设置转换为您的私有内部格式。

标签: delphi delphi-2006


【解决方案1】:

应用您自己的TFormatSettings 记录。适当时致电FormatDateTime('aConstantDefined',ADateTime,myFormatSettings)

如果您的应用程序更改系统格式设置,这将避免发生意外。 所以你不必使用Application.UpdateFormatSettingsApplication.UpdateMetricSettings

更新:

我应该补充一点,所有涉及区域设置的格式字符串函数都采用TFormatSettings 重载参数。它通常用于使应用程序线程安全,但在覆盖区域设置时会派上用场。在为通信/存储目的对数据进行序列化/反序列化时,我经常使用这种技术。

【讨论】:

  • 只要您在内部将日期操作为 TDateTDateTime 而不是字符串,您应该是非常安全的。真正的问题是当您有不同的时区时! (哦,钱也很麻烦。)
  • @LeonardoHerrera,钱总是一件麻烦事:)。是的,将数据保持在最佳格式,并且只在 I/O 期间进行必要的转换。
  • @LeonardoHerrera:一旦您首先通过本地机器的时区偏移调整了输入,您就可以将 UTC 日期/时间值存储在 TDateTime 中。您可以将TDateTime 通常用于大多数操作,就好像机器在 UTC 0 运行一样。只要确保在与本地时间戳值进行比较、转换回字符串等时考虑本地时区。
  • @RemyLebeau-TeamB - 正如我所说,很麻烦 :-)
猜你喜欢
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多