对于简单的一天迭代,您可以使用day_iterator
. 但是,据我所知,boost 的公历日期系统与 DST 无关(DST 是time的属性,而不是date的属性)。同样,Posix 时间系统“定义了一个非调整时间系统”。我认为本地时间系统适合您的任务。
例子:
#include <boost/date_time.hpp>
int main()
{
using namespace boost;
// POSIX time zone string for Germany
//local_time::time_zone_ptr zone(
// new local_time::posix_time_zone("CET-1CEST,M3.5.0,M10.5.0/3") );
// load from a database
local_time::tz_database db;
db.load_from_file("path_to_boost/libs/date_time"
"/data/date_time_zonespec.csv");
local_time::time_zone_ptr zone = db.time_zone_from_region("Europe/Berlin");
local_time::local_date_time ldt =
local_time::local_sec_clock::local_time(zone);
posix_time::ptime pt = posix_time::second_clock::local_time();
while(true)
{
ldt += gregorian::days(1);
pt += gregorian::days(1);
std::cout << "local_date_time: " << ldt << '\n';
std::cout << "ptime: " << pt << '\n';
std::cin.ignore();
}
}
注意:我不知道如何从用户/系统的设置中获取时区,也找不到可靠的 POSIX 时区字符串来源。有提升文档以及维基百科所说的内容,但最好自己检查一下。
感谢Matt Johnson指出了 POSIX 时间字符串中的一个错误并通过数据库提供了替代解决方案。