2014-06-05 38 views
1

這裏是代碼片段的boost ::區域::作爲日期格式標誌沒有任何效果

std::wstring aResult; 

boost::locale::generator gen; 
std::locale::global(gen("")); 

std::wostringstream output; 
output.imbue(std::locale()); 

boost::locale::date_time aTime(x); 

output << boost::locale::as::date_short << aTime; 

aResult = output.str(); 

的問題是,輸出總是給

  • 由地區指定的日期格式和作爲:: date_short

  • 爲:: date_long

  • 爲:: date_middle

總是給出相同的結果。

這裏可能是什麼情況?

謝謝!

回答

2

它可能表示您的系統沒有/不完整的區域設置定義。

E.g.此程序:

#include <boost/locale.hpp> 
#include <string> 

int main() 
{ 
    std::wstring aResult; 

    boost::locale::generator gen; 
    std::locale::global(gen("C")); 

    std::wcout.imbue(std::locale()); 

    boost::locale::date_time aTime; 

    std::wcout << std::endl << boost::locale::as::date_full << aTime; 
    std::wcout << std::endl << boost::locale::as::date_short << aTime; 
    std::wcout << std::endl << boost::locale::as::date_medium << aTime; 
} 

打印,在我的Ubuntu箱:

Thursday, June 5, 2014 3:06:27 PM 
6/5/14 3:06:27 PM 
Jun 5, 2014 3:06:27 PM 

Live On Coliru(運行在Debian)相同的代碼打印:

Thu Jun 5 13:07:04 2014 
Thu Jun 5 13:07:04 2014 
Thu Jun 5 13:07:04 2014 
+0

這就解釋了很多!謝謝。有報告說Mac OS上的語言環境存在一些錯誤。因此,將爲此員工使用碳庫。 – user1635583