在boost local_date_time中没有setter方法

No setter method in boost local_date_time?

本文关键字:setter 方法 time boost local date      更新时间:2023-10-16

我正在使用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);

但是我找不到这样的东西。有人知道这样的东西存在吗?

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

你看过发出的程序集吗?我认为你在过早地优化。

ptime的思想是"不可变的值类型"。local_date_time也是如此。这里的复杂因素是库设计人员对具有共享所有权的时区实例进行了建模(有充分的理由)。

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

警告如果您这样做,请确保您考虑dst/非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