C ++ wxWidgets - 从wxString创建wxDateTime

时间:2013-06-27 14:19:26

标签: c++ wxwidgets

我有wxString,其中包含小时,分钟,秒和毫秒。我正在尝试根据此信息创建wxDateTime。我可以将其保留为"%H:%M:%S.%f"格式,也可以单独获取值。

我的第一个想法是使用接受h,m,s,ms的wxDateTime构造函数,但是我无法找到如何在任何地方创建wxDateTime_t来传递给它。

wxDateTime& wxDateTime(wxDateTime_t hour, wxDateTime_t minute = 0, wxDateTime_t second = 0, wxDateTime_t millisec = 0)

我也在wxParseTime看了很多,我会使用默认的wxDateTime构造函数,然后调用它,但我不知道如何将时间传递给{{ 1}}正确到这个功能。

const wxChar*

任何人都可以对这些想法中的任何一个提出任何见解,或者给出更好的解决方法吗?

我通过此网站获取了我的信息wxwidgets

提前感谢您的帮助!

其他信息: wxDateTime::wxDateTimewxDateTime::wxParseTime

1 个答案:

答案 0 :(得分:0)

事实证明,wxParseTime不支持毫秒。传入"%H:%M:%S"是有效的。

此外,我发现这一点信息“类型wxDateTime_t被typedefed为unsigned short,用于包含年数,小时数,分钟数,秒数和毫秒数。”因此可以使用类似的东西从wxStrings中创建无符号短路。

unsigned long msec = 0;
token.ToULong(&msec);

这可以在小时,分钟,秒和毫秒内完成,以传递到wxDateTime& wxDateTime(wxDateTime_t hour, wxDateTime_t minute = 0, wxDateTime_t second = 0, wxDateTime_t millisec = 0)构造函数以创建所需的wxDateTime。

我使用的路线是使用wxParseTime更新wxDateTime对象,然后设置毫秒数。我得到了当前的wxDateTime,因此将预设年/月/日。

token = lineTkz.GetNextToken(); // Next token is "%H:%M:%S"
const wxChar* constTime = token.c_str(); // Convert from wxString to wxChar*
wxDateTime dateTime = wxDateTime::Now(); // Get current datetime object
dateTime.ParseTime(constTime); // Update hours, minutes, and seconds from wxChar*
token = lineTkz.GetNextToken(); // Next token is milliseconds as wxString
unsigned long msec = 0; // Create unsigned long
token.ToULong(&msec); // Get value out of wxString and save into unsigned long
dateTime.SetMillisecond(msec);  // Update wxDateTime's milliseconds using set method

您还可以使用bool isValid = dateTime.IsValid();进行错误检查来验证您是否拥有有效的wxDateTime。

您可以检查的另一件事是从调用wxParseTime

返回
const wxChar* bad = dateTime.ParseTime(constTime);

wxParseTime“如果转换失败则返回NULL,否则返回指向停止扫描的字符的指针。”。

希望这可以帮助遇到此问题的其他任何人。