2011-05-18 136 views
2

在使用C++的Linux环境中,我需要将time_t值转换为不同时区的英文字符串表示形式。例如1305750080 - >“2011-05-18 13:21:20 PST”。我可以使用gmtime()或localtime()与strftime()结合来为GMT和我的本地时区生成字符串。我将如何选择一个替代时区?C++ time_t到特定时区的std :: string

+0

我已经重申了这一点,因为接受的答案是调用不在C++标准库中的函数;而是在POSIX标准中。 – 2011-05-18 21:53:05

回答

1

我认为你可以用tzset来做到这一点。

setenv("TZ", "EST5EDT", 1); 
tzset(); 
4

gmtime() reference link here举例说明了一种应用时区偏移的非常简单的方法。当然,你可以创建一个枚举或什么的类,并提出一些更好的东西。

或者boost::date_time有一个相当广泛的实现,可以在linux和windows上运行。

+0

我发现这个引用,但是如果日期换行,那么不会引起问题吗? – 2011-05-18 20:36:01

+0

我会建议提高太.. – Nim 2011-05-18 20:38:55

+1

@JoshG:是的,这个简单的例子只处理时间,而不是日期,并且不处理与UTC有小数偏移的时区(如印度)。我可能也会使用提升。 – 2011-05-18 21:07:12

0

您可以使用putenv将环境变量TZ更改为您想要的任何时区,然后使用localtime或最好是localtime_r。如果需要,您可以使用getenv缓存旧副本。