它有一个名为LAZY_INIT的配置标志,其完整记录为here。默认情况下,它是开启的,并会在第一次访问每个单独的时区时导致对std::call_once的调用。但是,您可以编译:
-DLAZY_INIT=0
然后呼叫std::call_once消失。每个时区都从磁盘读取,并在首次访问时完成初始化(通过本地静态函数)。从此以后,事情就会稳定并且无锁,无需访问磁盘。自然,这会增加初始化时间,但会减少每个时区的“首次访问”时间。
该库需要C++ 11/14,因此可能不适合这个原因。它基于(并大量使用)C++ 11 库。下面是打印出当前本地时间的示例代码:
#include "tz.h"
#include
int
main()
{
using namespace date;
auto local = make_zoned(current_zone(), std::chrono::system_clock::now());
std::cout << local << '\n';
}
这只是我的输出:
2016-04-12 10:13:14.585945 EDT
图书馆是一个现代化,高性能的线程安全设计。它也非常灵活并充分记录。它的功能远远超出了对C的localtime的简单替换。不同的是C API,你可以指定你需要的任何IANA timezone,例如:
auto local = make_zoned("Europe/London", std::chrono::system_clock::now());
这给在伦敦当前时间:
2016-04-12 15:19:59.035533 BST
注意,默认情况下,时间戳的精度是, std::chrono::system_clock。如果你喜欢别的精度,这是很容易实现:
using namespace date;
using namespace std::chrono;
auto local = make_zoned("Europe/London", std::chrono::system_clock::now());
std::cout << format("%F %H:%M %Z", local) << '\n';
2016-04-12 15:22 BST
有关详细信息,请参阅docs。