linux 时区被锁定怎么,时区规则的Linux /跨平台API? (替换锁定localtime_r)

它有一个名为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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值