我的应用需要自定义时间和日期设置功能。我检查了ICU和boost :: date_time库。从完整性的角度来看,两者似乎都符合我的要求。我想知道两者之间是否有任何偏好以及基于什么?哪一个会在表现上得分?
我的应用需要自定义时间和日期设置功能。我检查了ICU和boost :: date_time库。从完整性的角度来看,两者似乎都符合我的要求。我想知道两者之间是否有任何偏好以及基于什么?哪一个会在表现上得分?
如果没有关于您的特定用例和环境的更多信息,就无法给出关于两个库是否优于另一个库的明确答案。正如Xeo所说,分析是解决性能问题的最佳方法。
如果您的用例包含“一般”日期/时间操作(即,您还不知道所需的全部日期/时间操作),您必须做出一些选择。作为 Boost.DateTime文档 解释说,您可以选择以下三种功能:
没有图书馆可以同时隐含地处理所有这三个的一个原因是,确定在给定时刻是否存在夏令时时间取决于管辖权,其政治问题以及许多其他因素。因此,涉及未来日期的计算可能变得不准确。
在决定这些功能时,您会注意到地理位置和本地化起着重要作用。例如,如果您的日期/时间要求仅需要支持单个区域设置,则没有正当理由将大型ICU库作为依赖项引入。但是,你可能不应该使用Boost.DateTime:作为一个与语言环境无关的库,它忽略了一周的第一天因语言环境而异的事实。此外,Boost.DateTime的时区支持是 破碎;最现代的软件使用 奥尔森数据库 用于时区处理和转换。相反,你应该考虑一下 Boost.Locale 使用Boost处理日期,时间和日历时,
默认情况下,Boost.Locale 使用ICU进行所有本地化任务,但提供了使用非基于ICU的本地化后端的选项。因此,如果您未在其他地方使用Boost(无论出于何种原因)并且需要支持超出当前OS时区的时区以及从UTC转移的时区(忽略夏令时),则仅使用ICU。如果您在其他地方使用Boost,您可以选择Boost.Locale和ICU,但差异很小(最后,ICU包含在内,因此它确实是一个风格和一致性问题)。最后的选择是在你没有在其他地方使用Boost并且你只处理操作系统时区的日期(或使用 先验 已知的UTC偏移量)。在这种情况下,您可能应该使用Boost.Locale.DateTime,但没有ICU支持。