2013-04-01 32 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)相同的格式。 –