繁体   English   中英

Howard Hinnant 的日期库:仅加载 IANA 时区数据库的一部分

[英]Howard Hinnant's date library: Only load part of the IANA Time Zone Database

我正在研究 RAM 有限的嵌入式系统。 此外,使用的工具链目前最多支持 C++17。

我必须将 UTC 时间戳转换为本地时间戳,以便向用户显示数据。 应该使用的时区是从另一个系统中检索到的。 这一切都与 Howard Hinnant 的 date 和 tz 库配合得非常好。

Howard Hinnant 在 CppCon 2016 上的精彩演讲中提到加载的 DB 大约占用 800 KB 的内存。 他还提到有一种方法可以只加载部分数据,并且它曾经被记录在某个地方。

由于我不需要回顾过去的能力,这将是节省一些 RAM 的好机会。

我找不到有关如何仅部分加载数据库的信息。 无论是在github 上,还是在那里或通过 Google 链接的任何资源中。

注意:这些技巧最近没有经过测试!

1.时间窗口

src/tz.cpp 有:

// These can be used to reduce the range of the database to save memory
CONSTDATA auto min_year = date::year::min();
CONSTDATA auto max_year = date::year::max();

我 5 年前写这篇文章时的想法是,您可以设置min_yearmax_year ,代码将跳过此时间窗口之外的数据库条目。 这是在实施USE_OS_TZDB选项(读取操作系统提供的数据库而不是 IANA 文本数据库)之前编写的。 所以它从来没有用USE_OS_TZDB=1测试过。

2.地理窗口

src/tz.cpp 有:

CONSTDATA char*const files[] =
{
    "africa", "antarctica", "asia", "australasia", "backward", "etcetera", "europe",
    "pacificnew", "northamerica", "southamerica", "systemv", "leapseconds"
};

在读取数据库的文本版本 ( USE_OS_TZDB=0 ) 时,这是它读取的文本数据库文件列表。 删除对您的应用程序无用的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM