我正在寻找从std::wstring
创建格式化(MySQL DATETIME兼容)std::time_t
的方法。我目前所做的是从std::string
创建一个std::put_time
std::stringstream
,然后在构造上将其转换为std::wstring
:
std::wstring foo(myStdString.begin(), myStdString.end())
但我觉得这不是很优雅。我有一个既定的方法吗?有可能在某种形式下使用宽字符进行检索吗?
回答(见下文)
我忘了以正确的格式指定std::put_time
的格式字符串,然后它与std::string
类似。
这是我的结果代码:
auto time_last_write = boost::filesystem::last_write_time(path);
std::wostringstream wstream;
wstream << std::put_time(std::gmtime(&time_last_write), L"%Y-%M-%d %H:%M:%S");
答案 0 :(得分:2)
您可以使用std::put_time()
。请记住,字符类型是从格式&#39;中推断出来的。参数:
#include <iostream>
#include <iomanip>
#include <ctime>
int main()
{
std::time_t t = std::time(nullptr);
std::tm timestamp = *std::localtime(&t);
static const wchar_t *format = L"It is %T.";
std::wcout << std::put_time(×tamp, format);
}
您可能希望写入std::wostringstream
而不是std::wcout
,但原则不会改变。
答案 1 :(得分:0)
如果您需要使用 localtime_s
:
#include <time.h>
std::wstring GetDateTime()
{
time_t rawtime;
struct tm timeinfo;
wchar_t buffer[20];
time(&rawtime);
localtime_s(&timeinfo, &rawtime);
wcsftime(buffer, 20, L"%Y-%m-%d %H:%M:%S", &timeinfo);
return buffer;
}