C++ C++;wxWidgets-从wxString创建wxDateTime

C++ C++;wxWidgets-从wxString创建wxDateTime,c++,wxwidgets,C++,Wxwidgets,我有一个wxString,它包含小时、分钟、秒和毫秒。我正试图根据此信息创建一个wxDateTime。我可以将其保留为%H:%M:%S.%f“的格式,也可以单独获取值 我的第一个想法是使用接受h、m、s、ms的wxDateTime构造函数,但是我找不到如何在任何地方创建一个wxDateTime\u t来传递它 wxDateTime&wxDateTime(wxDateTime小时,wxDateTime分钟=0,wxDateTime秒=0,wxDateTime毫秒=0) 我也一直在研究wxParse

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

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

wxDateTime&wxDateTime(wxDateTime小时,wxDateTime分钟=0,wxDateTime秒=0,wxDateTime毫秒=0)

我也一直在研究
wxParseTime
如何使用默认的
wxDateTime
构造函数,然后调用它,但是我不知道如何将时间作为
const wxChar*
正确地传递给这个函数

const wxChar*ParseTime(const wxChar*time)

有人能对这两种想法中的任何一种给出见解,或者给出更好的方法吗

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

提前感谢您的帮助

其他信息: ,
.

因此,wxParseTime不支持毫秒。传入
“%H:%M:%S”
是有效的

我还发现了一些信息“类型wxDateTime_t被类型化为无符号短字符,用于包含年数、小时数、分钟数、秒数和毫秒数。”因此,可以使用类似的方法从WxString生成无符号短字符

unsigned long msec = 0;
token.ToULong(&msec);
这可以通过小时、分钟、秒和毫秒传递到
wxDateTime&wxDateTime(wxDateTime\u t hour,wxDateTime\u t minute=0,wxDateTime\u t second=0,wxDateTime\u t毫秒=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,否则返回指向停止扫描的字符的指针。”


希望这能帮助其他遇到此问题的人。

我在问题的底部添加了链接。好的。那么,如果将字符串传递到wxDateTime::ParseDateTime(),会发生什么情况呢?它应该足够好用!它需要一个常量wxChar*并且它不支持ms,我刚刚发布了一个答案,其中包含了我找到的一系列信息。FWIW毫秒是受支持的,因为在
ParseFormat()
中,2.9版已经支持了4年多。所以它们在ParseFormat()中受支持,但在ParseTime中不受支持。正确吗?正确,
ParseTime()
只尝试最常用的几种格式,没有一种格式包含毫秒。可能它也应该尝试毫秒。。。