【发布时间】:2020-11-07 06:07:35
【问题描述】:
我从服务器 11/07/2020 10:57:13 获取字符串,我将其转换为双精度值 1604723233,但是转换后的双精度值比实际值小 1 小时。
以下是我尝试转换的方式...
double StringDateToDouble(string &strDate, string format)
{
tm currentTime = CurrentTimeToTM();
tm timeinfo;
string strTimeZone = currentTime.tm_zone;
strDate.append("");
strDate.append(strTimeZone);
strptime(strDate.c_str(), format.c_str(), &timeinfo);
time_t timeInSec = mktime(&timeinfo);
return static_cast<double>(timeInSec);
}
tm CurrentTimeToTM()
{
struct tm timeinfo = {0};
time_t rawtime;
rawtime = time(&rawtime);
localtime_r(&rawtime, &timeinfo);
return timeinfo;
}
正确的方法是什么?这里有什么遗漏吗?任何建议表示赞赏。
【问题讨论】:
-
代码的用途是什么?为什么你需要一个日期的
double?如何使用double表示日期? -
C++ 标准不保证
time_t(0)是1970-01-01T00:00Z。 C++20 引入了time_since_epoch将与 UNIX 纪元相关的保证。 -
顺便说一句,不能保证
std::time_t是整数类型,或者它的值是自某个纪元以来的秒数。 -
哦,正好休息一小时听起来像是夏令时问题。
-
@Vijay 这是因为时区不同。您从服务器获得的响应是在哪个时区?