如何以正确的格式获取 UTC 偏移量(时区)?
Posted
技术标签:
【中文标题】如何以正确的格式获取 UTC 偏移量(时区)?【英文标题】:How to get UTC offset (timezone) in correct format? 【发布时间】:2020-12-29 06:42:07 【问题描述】:我有这样的代码,可以将 Epoch 时间戳转换为 GMT 时间戳:
#include <array>
#include <ctime>
#include <string>
std::string getDateTimeZ(size_t epoch)
const time_t time = epoch;
const auto timeInfo = *localtime(&time);
std::array<char, 80> buffer;
std::strftime(buffer.data(), buffer.size(), "%Y-%m-%dT%H:%M:%S%z", &timeInfo);
return buffer.data();
这很好,除了我的时间戳是例如:
2020-09-10T20:53:10+0300
我希望它是:
2020-09-10T20:53:10+03:00
如何开箱即用地执行此操作,而不会对结果字符串进行丑陋且容易出错的 hack?除了%z
,我看不到任何其他获得偏移量的选项。
其他一些库,如 Boost 也是可以接受的。
【问题讨论】:
【参考方案1】:您可以使用此preview of the C++20 <chrono>
facilities,它适用于 C+11:
#include "date/tz.h"
#include <chrono>
#include <cstddef>
#include <string>
#include <sstream>
std::string
getDateTimeZ(std::size_t epoch)
using namespace date;
using namespace std::chrono;
zoned_seconds ztcurrent_zone(), sys_secondssecondsepoch;
std::ostringstream os;
os << format("%FT%T%Ez", zt);
return os.str();
这个库的诀窍是使用%Ez
代替%z
。
这个库确实需要some installation。
【讨论】:
以上是关于如何以正确的格式获取 UTC 偏移量(时区)?的主要内容,如果未能解决你的问题,请参考以下文章