【发布时间】:2020-09-21 08:50:51
【问题描述】:
所以我想在 C++ 中创建一个格式为 HH:MM:SS 的时间戳(作为字符串)。我使用std::chrono 获取unix 时间戳,然后计算小时、分钟和秒。
// Get unix time stamp in seconds.
const auto unix_time_stamp = std::chrono::system_clock::now();
long long seconds_since_epoch = std::chrono::duration_cast<std::chrono::seconds>(unix_time_stamp.time_since_epoch()).count();
// Calculate current time (hours, minutes, seconds).
uint8_t hours = (seconds_since_epoch % 86400) / 3600;
uint8_t minutes = (seconds_since_epoch % 3600) / 60;
uint8_t seconds = (seconds_since_epoch % 60);
// Create strings for hours, minutes, seconds.
std::string hours_string = std::to_string(hours);
std::string minutes_string = std::to_string(minutes);
std::string seconds_string = std::to_string(seconds);
// Check if the number is only one digit. If it is, add a 0 in the beginning (5:3:9 --> 05:03:09).
if(hours_string.size() == 1)
{
hours_string = "0" + hours_string;
}
if(minutes_string.size() == 1)
{
minutes_string = "0" + minutes_string;
}
if(seconds_string.size() == 1)
{
seconds_string = "0" + seconds_string;
}
// Append to a final string.
std::string time_stamp = hours_string + ":" + minutes_string + ":" + seconds_string;
这一切都很好,但有一个大问题:时区。 通过这种方式,我只计算 GMT 的时间戳。是否有任何简单、快速且最重要的是便携的方法可以在几秒、几分钟或几小时内获得系统时区的“偏移量”? “便携”是指独立于平台的。
请注意:我知道您可以使用std::strftime 等更轻松地完成所有这些操作,但我真的很想自己实现。
【问题讨论】: