使用date创建std :: wstring

时间:2017-06-19 15:29:17

标签: c++

我正在寻找从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");

2 个答案:

答案 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(&timestamp, 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;
}