Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:您会选择boost::date\u time还是icu::date/time库?_C++_Boost_Icu_Boost Date Time - Fatal编程技术网

C++ C++;:您会选择boost::date\u time还是icu::date/time库?

C++ C++;:您会选择boost::date\u time还是icu::date/time库?,c++,boost,icu,boost-date-time,C++,Boost,Icu,Boost Date Time,我的应用程序需要自定义时间和日期设置功能。我检查了ICU和boost::date\u时间库。从完整性的角度来看,两者似乎都符合我的要求。我想知道两者之间是否有任何偏好,基于什么?哪一个会在性能上得分?如果没有关于您的特定用例和环境的更多信息,就无法给出一个关于两个库的性能是否超过另一个库的明确答案。正如Xeo所建议的,评测是解决性能问题的最佳方法 如果您的用例包括“常规”日期/时间操作(即,您还不知道您需要的所有日期/时间操作),那么您必须做出一些选择。如所述,您可以在以下三种功能之间进行选择:

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

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

如果您的用例包括“常规”日期/时间操作(即,您还不知道您需要的所有日期/时间操作),那么您必须做出一些选择。如所述,您可以在以下三种功能之间进行选择:

  • 与挂钟时间完全一致
  • 时间瞬间之间的精确计算
  • 处理未来时间瞬间的能力
  • 任何图书馆都无法同时隐式处理这三个问题的一个原因是,确定夏令时是否在某一特定时刻存在取决于管辖权、政治问题和许多其他因素。因此,涉及未来日期的计算可能会变得不准确

    在决定这些功能时,您会注意到地理位置和本地化扮演着重要的角色。例如,如果您的日期/时间要求只需要支持一个区域设置,那么就没有理由将大型ICU库作为依赖项引入。但是,您可能也不应该使用Boost.DateTime:作为一个与区域设置无关的库,它忽略了一个事实,即一周的第一天因区域设置而异。此外,Boost.DateTime的时区支持是;大多数现代软件使用的时区处理和转换。相反,您应该考虑何时使用Boost与日期、时间和日历一起工作。 默认情况下,Boost.Locale,但提供了使用非基于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的开销
    • 关于性能:分析是了解性能的唯一方法

    您是否已经在应用程序中使用boost?如果你是,那么少一个图书馆是更好的选择。如果你不是,你应该;)。对我已经在使用boost了。但是,我的应用程序对性能非常敏感。日期/时间函数始终在执行路径中被调用。因此,我想知道在做出选择时是否有任何性能方面的考虑。@notifyroy:因为我们没有为您的特定用例编码,所以您最好将它们并排实现并进行配置。boost不依赖于ICU吗?您的性能要求是什么?谢谢。这是我找到的唯一一个在经过大约一个小时的仔细搜索后,对Boost.DateTime和Boost.Locale.DateTime进行了简洁比较的来源。Boost真的在MS WIndows下使用ICU吗?我很惊讶,因为我以前在Windows下编译过boost,而且我不记得必须对ICU库做任何事情。也许这是最近的一次转变?@Alexiswillke,当您第一次构建Boost库时,有一个选项包括对ICU的支持。如果要支持ICU,必须首先构建ICU,将Boost库参数设置为包含ICU支持,然后构建Boost。