我想使用Boost的日期時間庫以自定義格式解析日期/時間字符串。我試圖使用的格式非常不尋常,因爲它包含Posix時區描述字符串。 docs爲庫clearly state有一個標誌(%ZP
)可用於處理Posix時區字符串的輸入和輸出。我試圖解析的值來自Web瀏覽器,而不是編寫JS來執行區域字符串中指定的轉換,然後以UTC發送到服務器,我寧願只做它服務器端(因爲Boost應該很容易做到這一點)。很明顯,如果它工作,我不會在這裏發佈。此代碼會拋出一個boost::bad_lexical_cast
,其值爲「源類型值不能被解釋爲目標」。使用帶時區字符串的Boost日期時間庫解析失敗
using namespace boost::posix_time;
using namespace boost::local_time;
using namespace boost::gregorian;
std::istringstream ss("1989-11-09T15:30:42.005;PST-8PDT,M3.2.0,M11.1.0");
ss.exceptions(std::ios_base::failbit);
local_time_input_facet* facet = new local_time_input_facet("%Y-%m-%dT%H:%M:%S%F;%ZP");
ss.imbue(std::locale(ss.getloc(), facet));
local_date_time ldt(not_a_date_time);
ss >> ldt; // do the parse
std::cout << ldt.to_string();
然而,如果你用"%Y-%m-%dT%H:%M:%S%F;"
替換格式字符串,解析成功就好了(當然它輸出在錯誤的時區的值)。
任何想法我做錯了什麼? %ZP
標誌的文檔沒有示例,所以我不確定它應該如何使用。
你是否得到這個工作? – Nim 2011-01-27 09:10:22