C++ wxWidgets - Creating wxDateTime from wxString

C++ wxWidgets - Creating wxDateTime from wxString

本文关键字:from wxString wxDateTime Creating wxWidgets C++      更新时间:2023-10-16

我有一个包含小时、分钟、秒和毫秒的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构造函数,然后调用它,但我不知道如何将时间作为const wxChar*正确地传递给这个函数。

const wxChar * ParseTime(const wxChar *time)

有人能对这两个想法中的任何一个有任何见解吗?或者对此有更好的方法吗?

我一直在通过这个网站wxwidgets获取我的信息。

提前感谢您的帮助!

其他信息:wxDateTime::wxDateTime,wxDateTime::wxParseTime。

所以wxParseTime不支持毫秒。不过,传入"%H:%M:%S"是有效的。

我还发现了这样一条信息:"wxDateTime_t类型被类型化为无符号短,用于包含年、小时、分钟、秒和毫秒的数量。"因此,可以使用类似的东西从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,否则返回指向停止扫描的字符的指针。".

希望这能帮助其他遇到这种情况的人。