C++ std::get_time中的日期时间格式

C++ std::get_time中的日期时间格式,c++,C++,如何修改此代码,以便能够将字符串“22/12/2016 01:12:10”正确解析为日期时间变量 struct tm date_time = {}; std::wstring dateTimeFormat{ L"%d/%m/%Y %H:%M:%S" }; std::istringstream ss("22/12/2016 01:12:10"); ss >> std::get_time(&date_time, dateTimeFormat.c_str()); 1>c

如何修改此代码,以便能够将字符串“22/12/2016 01:12:10”正确解析为日期时间变量

struct tm date_time = {};
std::wstring dateTimeFormat{ L"%d/%m/%Y %H:%M:%S" };
std::istringstream ss("22/12/2016 01:12:10");
ss >> std::get_time(&date_time, dateTimeFormat.c_str());


 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools
\msvc\14.12.25827\include\iomanip(190): error C2338: wrong character type for 
get_time
 1>c:\...\procedure.cpp(70): note: see reference to function template 
instantiation 'std::basic_istream<char,std::char_traits<char>> &std::operator 
>><char,std::char_traits<char>,_Elem>(std::basic_istream<char,std::char_traits<char>>
 &,const std::_Timeobj<_Elem,tm    *> &)' being compiled
 1>                   with
 1>                    [
 1>                     _Elem=wchar_t
 1>                     ]
 1>Done building project "projectname" -- FAILED.
struct tm date\u time={};
std::wstring dateTimeFormat{L”%d/%m/%Y%H:%m:%S“};
std::istringstream ss(“22/12/2016 01:12:10”);
ss>>std::get_time(&date_time,dateTimeFormat.c_str());
1> c:\ProgramFiles(x86)\microsoft visual studio\2017\community\vc\tools
\msvc\14.12.25827\include\iomanip(190):错误C2338:的字符类型错误
抓紧时间
1> c:\…\procedure.cpp(70):注意:请参阅函数模板的参考
实例化“std::basic\u istream&std::operator”
>>(标准:基本信息流)
&,const std::_Timeobj&)正在编译
1> 与
1>                    [
1> _Elem=wchar\t
1>                     ]
1> 已完成生成项目“projectname”--失败。

您正在混合宽字符和窄字符

对于宽字符,代码应为:

    struct tm           date_time = {};
    std::wstring        dateTimeFormat{L"%d/%m/%Y %H:%M:%S"};
    std::wistringstream ss(L"22/12/2016 01:12:10");

    ss >> std::get_time( &date_time, dateTimeFormat.c_str() );
    struct tm          date_time = {};
    std::string        dateTimeFormat{"%d/%m/%Y %H:%M:%S"};
    std::istringstream ss("22/12/2016 01:12:10");

    ss >> std::get_time( &date_time, dateTimeFormat.c_str() );
对于窄字符,应为:

    struct tm           date_time = {};
    std::wstring        dateTimeFormat{L"%d/%m/%Y %H:%M:%S"};
    std::wistringstream ss(L"22/12/2016 01:12:10");

    ss >> std::get_time( &date_time, dateTimeFormat.c_str() );
    struct tm          date_time = {};
    std::string        dateTimeFormat{"%d/%m/%Y %H:%M:%S"};
    std::istringstream ss("22/12/2016 01:12:10");

    ss >> std::get_time( &date_time, dateTimeFormat.c_str() );
无论哪种方式,都需要以下标题:

#include <iomanip>
#include <sstream>
#包括
#包括

std::wstring
std::istringstream
不太协调。
std::string
std::stringstream
也不起作用。另外,我得到了116年,我想这是因为2016-1900=116,也就是说,我总是在输出年加上1900。这个字符串还有其他“水下的石头”吗?