我有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。
提前感谢您的帮助!
答案 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,否则返回指向停止扫描的字符的指针。”。
希望这可以帮助遇到此问题的其他任何人。