2017-06-19 8 views
0

std::time_tからフォーマットされた(MySQL DATETIMEと互換性がある)std::wstringを作成する方法をお探しです。私は、現時点ではやっていることは、このように建設にstd::wstringにそれを変換し、その後、std::stringstreamからstd::put_timestd::stringを作成することです:日付を含むstd :: wstringを作成する

std::wstring foo(myStdString.begin(), myStdString.end())

しかし、私は、これは非常にエレガントではない感じ。そこにはこれを行うための確立された方法がありますか?たぶんワイド文字を使用してフォームで取得するいくつかの方法?

回答(下記参照)

私はそれがstd::stringに似た働き、適切なフォーマットでstd::put_timeのフォーマット文字列を指定するのを忘れていました。

これは私の結果のコードです:

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

'std :: wstring'を直接取得するために' std :: wostringstream'を使用してみませんか? –

+0

std :: put_timeはそれで動作しないようです。 – DenverCoder21

+0

'std :: put_time (...)'のように、文字の種類を特に指定する必要があるかもしれません。あるいは、標準ライブラリの実装上のバグかもしれません。どのコンパイラを使用していますか?どのバージョン? –

答えて

2

あなたはstd::put_time()を使用することができます。文字の種類が「フォーマット」引数のそれから推定されることに注意してください:

#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に書きたいと思うでしょうが、原則は変更されません。

関連する問題