【问题标题】:convert wxString to time_t将 wxString 转换为 time_t
【发布时间】:2013-03-22 03:10:58
【问题描述】:

我有一个以日期为值的 wxString。日期格式的存储取决于区域设置或区域设置。

例如。 wxString dateStr = "9/10/2013" [意大利的 dd/mm/yyyy 格式作为区域语言环境设置]。

当我使用 wxDateTime::ParseDate(dateStr) 解析日期字符串并尝试使用 wxDateTime::GetTicks() 函数将其转换为 time_t 时。但是当日小于或等于 12 时,它会交换日和月的值,例如 2013 年 3 月 10 日或 2013 年 11 月 12 日。我将月份分别设为 3 和 12,将天分别设为 10 和 11。但如果日期大于 12 即 14/10/2013 或 28/10/2013,则可以正常工作。

我想根据区域设置将上述日期字符串转换为 time_t。我正在使用 windows 和 linux 开发环境。

请通过示例或代码 sn-p 帮助我解决这个问题。

【问题讨论】:

  • 可能与您系统的区域设置有关?如果它们设置为 en_US 之类的东西,那么日期格式将被解释为愚蠢的日期格式。
  • ISO 8601 FTW xkcd.com/1179

标签: c++ datetime wxwidgets time-t


【解决方案1】:

我建议你改用wxDateTime::ParseDateFormat,然后你可以指定日期字符串的确切格式。

ParseDate 出现问题的原因是它首先尝试解析美国格式的日期字符串(格式为 mm/dd/yyyy),如果失败,它会尝试其他格式。

【讨论】:

  • 感谢您的回复 J. Pileborg,但我有一个应用程序假设在不同国家/地区运行,系统区域设置不同,因此我无法将 wxDateTime::ParseDateFormat 中的日期格式传递为它应该从系统的区域设置中选择。您能否建议某种方式从系统区域设置中选择区域设置并使用该日期格式解析日期字符串。
  • wxDateTime::ParseFormat()[docs.wxwidgets.org/2.8/… 可以使用“%x”作为格式。
  • @Gunjan49 是的,它使用与std::strftime 相同的格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 2015-03-22
  • 1970-01-01
  • 2011-03-14
  • 2013-10-24
  • 2013-06-23
相关资源
最近更新 更多