2013-04-01 52 views
0

我有一個wxString,它有一個日期作爲它的值。日期格式根據區域設置或區域設置進行存儲。將wxString轉換爲time_t

例如, wxString dateStr =「2013年9月10日」[日/月/年意大利格式爲區域語言環境設置]。

當我使用wxDateTime :: ParseDate(dateStr)解析日期字符串並嘗試使用wxDateTime :: GetTicks()函數在time_t中將其轉換。但是,如果日期小於或等於12,例如3/10/2013或12/11/2013,則它可以交換日期和月份的值。我得到的月份分別爲3日和12日,日爲10日和11日。但如果日期大於12即2013年10月14日或2013年10月28日,它就可以正常工作。

我想上面的日期字符串轉換爲根據區域設置time_t的。我使用windows以及linux開發環境。

請用示例或代碼片段幫我解決這個問題。

+0

也許它與您的系統的區域設置有關?如果它們被設置爲'en_US',那麼日期格式將以他們愚蠢的日期格式被解釋。 – dreamlax

+1

ISO 8601 FTW http://xkcd.com/1179/ –

回答

1

我建議你使用wxDateTime::ParseDateFormat代替,那麼你可以指定日期字符串的準確格式。

你有問題,ParseDate的原因是,它首先試圖解析美國格式(其中格式爲mm/dd/yyyy)的日期字符串,如果失敗則嘗試其他格式。

+0

感謝您的答覆J. Pileborg,但我有這是假設在不同的國家,不同系統區域設置運行的應用程序,所以我不能傳遞日期格式在wxDateTime :: ParseDateFormat中,因爲它應該從系統的區域設置中選取。你能否建議某種方式從系統區域設置中選擇區域設置,並使用該日期格式解析日期字符串。 – Gunjan49

+0

可以使用「%x」作爲格式的wxDateTime :: ParseFormat()[http://docs.wxwidgets.org/2.8/wx_wxdatetime.html#wxdatetimeparseformat]。 – Gunjan49

+0

@ Gunjan49是的,它使用與['std :: strftime'](http://en.cppreference.com/w/cpp/chrono/c/strftime)相同的格式。 –