在boost local_date_time中没有setter方法?

时间:2016-11-15 01:00:53

标签: c++ boost

我正在使用boost date_time库在我的应用程序中开发过滤方案。假设我有10000条记录,每条记录都包含一个时间戳(以UTC为单位的毫秒数)。我想使用boost将此时间戳转换为给定时区,然后以毫秒为单位返回时间部分。我使用以下代码片段:

local_date_time localDate(pt, tz_ptr);
return localDate.local_time().time_of_day().total_milliseconds();

在此代码中,pt是根据时间戳(以毫秒为单位)创建的ptime对象。所有10000条记录的时区指针都是常量。因此,在每次迭代时创建local_date_time对象都是浪费。如果可能,我想重用这个对象。我一直在寻找一种方法:

localDate.set(ptime pt);

但我找不到那样的东西。有人知道这样的事情是否存在?

1 个答案:

答案 0 :(得分:3)

"因此,在每次迭代时创建一个local_date_time对象都是浪费的。

您是否看过发射过的组件?我认为你过早地进行了优化。

ptime的想法是"不可变的值类型"。 local_date_time也是如此。这里的复杂因素是图书馆设计者已经模拟了具有共享所有权的时区实例(出于好的理由)。

这实际上是你应该担心的唯一部分。我预先计算时区偏移量,只需一次,然后完全放弃local_date_time。

  

CAVEAT 如果您这样做,请确保考虑到dst / non-dst日期!偏移量会有所不同。我不确定boost / OS是否会考虑历史时区变化。

     

最好使用Boost DateTime的区域实现,只需在没有local_date_time帮助的情况下进行原始转换

避免大量复杂性的另一种方法是考虑使用

  • boost::date_time::c_local_adjustor<ptime>
  • boost::date_time::local_adjustor<ptime>

请参阅http://www.boost.org/doc/libs/1_62_0/doc/html/date_time/examples.html#date_time.examples.local_utc_conversion