我正在编写一个将utc-time转换为不同时区的应用程序,现在我可以使用这样的东西
putenv("TZ=TIMEZONE1");
tzset()
...
do time conversions
但我不认为它是线程安全的,所以是否有任何C / C ++库可以通过将timezone作为参数来进行时区转换而不是一些全局
答案 0 :(得分:3)
您可能需要自己的代码/库来处理时区。标准库的处理非常落后,不适合处理比在程序生命周期内修复的单个时区更复杂的事情。
但是,一种可能的解决方案是分配共享内存fork
,并更改子进程中的时区,然后通过共享内存将结果传回,以便在waitpid
返回后读取父母。这虽然价格昂贵,但并不像听起来那么糟糕,因为fork
在现代系统上很快。我的经验是,1 fork
等于2-3 pthread_create
次来电,1 pthread_create
来电等于2-3 open
次来电。由于更改时区需要打开一个或多个文件并对其执行IO,因此您可能不会将总时间成本增加3-5倍以上。如果你可以为你正在使用的每个时区保留一个子进程,那么它当然会更有效率。
答案 1 :(得分:2)
Boost.DateTime支持时区转换。