gpt4 book ai didi

C++:你会选择 boost::date_time 还是 icu::date/time 库?

转载 作者:可可西里 更新时间:2023-11-01 15:12:56 26 4
gpt4 key购买 nike

我的应用程序需要自定义时间和日期设置功能。我检查了 ICU 和 boost::date_time 库。从完整性的角度来看,两者似乎都符合我的要求。我想知道两者之间是否有任何偏好,依据是什么?哪个会在性能上得分?

最佳答案

如果没有关于您的特定用例和环境的更多信息,就无法给出关于哪个库是否优于另一个库的明确答案。正如 Xeo 所建议的那样,分析是解决性能问题的最佳方式。

如果您的用例包括“一般”日期/时间操作(,您还不知道您需要的所有日期/时间操作),有几个选择你必须做。作为Boost.DateTime documentation解释说,您可以在这三种功能之间进行选择:

  1. 与挂钟时间完全一致
  2. 时刻之间的准确计算
  3. 能够处理 future 的时间点

没有图书馆可以同时隐含地处理所有这三个问题的一个原因是,确定在给定时刻是否存在夏令时取决于管辖区、其政治问题和许多其他因素。因此,涉及 future 日期的计算可能会变得不准确。

在选择这些功能时,您会注意到地理和本地化起着重要作用。例如,如果您的日期/时间要求只需要支持单一语言环境,则没有正当理由将大型 ICU 库作为依赖项引入。但是,您可能也不应该使用 Boost.DateTime:作为与语言环境无关的库,它忽略了一周的第一天因语言环境而异的事实。此外,Boost.DateTime 的时区支持是 broken ;大多数现代软件使用 Olson database用于时区处理和转换。相反,您可能应该考虑 Boost.Locale当使用 Boost 处理日期、时间和日历时。

默认情况下,Boost.Locale uses ICU for all localization tasks ,但提供了使用非基于 ICU 的本地化后端的选项。因此,如果您没有在其他地方使用 Boost(无论出于何种原因)并且需要支持超出当前操作系统时区的时区和从 UTC 转移的时区(忽略夏令时),则仅使用 ICU。如果你在其他地方使用 Boost,你可以在 Boost.Locale 和 ICU 之间做出选择,但差异很小(最后,ICU 被包括在内,所以这实际上是一个风格和一致性问题)。当您不在其他地方使用 Boost 并且您只处理操作系统时区中的日期(或使用与 UTC 的先验已知偏移量的日期修改)时,就会出现最后的选择。在那种情况下,您可能应该使用 Boost.Locale.DateTime,但没有 ICU 支持。

总结

  • 不要使用 Boost.DateTime 有两个原因:(1) 它的时区支持已损坏; (2) 它忽略了“星期几”的计算取决于语言环境这一事实。请改用 Boost.Locale.DateTime。
  • 如果您在别处使用 Boost,请继续使用它。它将自动包含基于 ICU 的本地化后端。您也可以直接调用它们(通过直接包含 ICU),但没有太大区别。
  • 如果您在其他地方使用 Boost,那么您的选择取决于用例是否与区域设置无关。如果它与语言环境无关,您可以使用 Boost.Locale.DateTime 的非基于 ICU 的本地化后端(例如、std、posix)并避免 ICU 开销。或者,如果您的用例取决于语言环境,那么您可以使用 ICU 而无需引入 Boost 的开销。
  • 关于性能:分析是唯一的了解方式。

关于C++:你会选择 boost::date_time 还是 icu::date/time 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9354806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com