Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用c+将时间分区的XML类型dateTime转换为time+;_C++_C_Datetime_Strptime - Fatal编程技术网

C++ 如何使用c+将时间分区的XML类型dateTime转换为time+;

C++ 如何使用c+将时间分区的XML类型dateTime转换为time+;,c++,c,datetime,strptime,C++,C,Datetime,Strptime,我正在尝试将2014-08-19T10:05:33Z转换为时间 我的代码结果是:1408435533 std::string expirationTime("2014-08-19T10:05:33Z"); struct tm tm; memset(&tm, 0, sizeof(tm)); strptime(expirationTime.c_str(), "%Y-%m-%dT%TZ", &tm); time_t timeStamp = mktime(&tm); printf

我正在尝试将2014-08-19T10:05:33Z转换为时间

我的代码结果是:1408435533

std::string expirationTime("2014-08-19T10:05:33Z");
struct tm tm;
memset(&tm, 0, sizeof(tm));
strptime(expirationTime.c_str(), "%Y-%m-%dT%TZ", &tm);
time_t timeStamp = mktime(&tm);
printf("time_t for %s is %ld \n\n", expirationTime.c_str(), timeStamp);
结果:

time_t for 2014-08-19T10:05:33Z is 1408435533
但当我使用在线epoch转换器时,我得到以下信息:

1408435533
Is equivalent to:

08/19/2014 @ 8:05am (UTC)
2014-08-19T08:05:33+00:00 in ISO 8601
这似乎是错误的,因为存在2小时的时差。

请参阅: 使用timegm而不是mktime,但我认为它不适用于Windows

似乎是错误的,因为有2小时的时差

:

使用,您可以这样做:

#include "chrono_io.h"
#include "date.h"
#include <iostream>
#include <sstream>

int
main()
{
    using namespace date;
    std::string expirationTime("2014-08-19T10:05:33Z");
    std::istringstream in{expirationTime};
    sys_seconds timeStamp;
    in >> parse("%Y-%m-%dT%TZ", timeStamp);
    std::cout << "timeStamp is " << timeStamp.time_since_epoch() 
              << " which is "    << timeStamp << '\n';
}

你考虑过你的时区吗?你能告诉我你的代码是否用当前时区(即UTC+偏移量)修改时间吗。在线结果是UTC。代码如上所示,它不修改时间。根据提供的字符串“2014-08-19T10:05:33Z”,如何提取时区偏移?谢谢!您可以尝试使用代码和联机转换器转换当前时间历元。比较这些结果。如果差值与您所在时区的偏移量相匹配,只需减去它即可。
    extern long timezone;
    timeStamp += timezone;
#include "chrono_io.h"
#include "date.h"
#include <iostream>
#include <sstream>

int
main()
{
    using namespace date;
    std::string expirationTime("2014-08-19T10:05:33Z");
    std::istringstream in{expirationTime};
    sys_seconds timeStamp;
    in >> parse("%Y-%m-%dT%TZ", timeStamp);
    std::cout << "timeStamp is " << timeStamp.time_since_epoch() 
              << " which is "    << timeStamp << '\n';
}
timeStamp is 1408442733s which is 2014-08-19 10:05:33