2016-06-19 6 views
-2
COleDateTime m_dt; 
m_ctrlDateTime.GetTime(m_dt); 
double d = dt.m_dt; 
System::DateTime datum; 
datum.FromOADate(d); 

Ich versuche, Datum und Uhrzeit von einem DateTimePicker-Steuerelement zu erhalten und später den Wert des Datums auf diesen Wert festzulegen. Datum ist System :: DateTime (C#). Aber Datum ist das "1/1/1 00:00:00" Was ist das Problem?System :: DateTime gibt den Wert 1/1/1 zurück 00:00:00

+0

so etwas wie Need: Datetime jetzt = m_ctrlDateTime.GetTime (m_dt); – jdweng

+0

@jdweng Wie würde das funktionieren? Die "GetTime" -Memberfunktion gibt keinen 'DateTime'-Wert zurück. Es gibt tatsächlich ein 'BOOL' zurück, was bedeutet, dass es sogar kompilieren könnte, indem es eine implizite Umwandlung durchführt, um den' DateTime' Konstruktor aufzurufen, der ein 'long' braucht. –

+0

Warum brauchen Sie die Linie? – jdweng

Antwort

1

Das Problem ist die allerletzte Zeile:

datum.FromOADate(d); 

DateTime::FromOADate ist eigentlich eine statische Elementfunktion dass kehrt a DateTime Objekt. In C++ - Begriffen kann man es sich wie eine named constructor vorstellen.

Es tut nicht initialisieren datum wie eine normale Member-Funktion würde. Was dich verwirrt, ist die Tatsache, dass C++ allows you to call static members using an instance of the object. In C# wäre das nicht möglich, und Sie hätten einen Kompilierungsfehler erhalten, der Sie auf das Problem aufmerksam gemacht hätte.

Schreiben Sie den Code wie folgt, und Sie werden in Ordnung sein:

COleDateTime m_dt; 
m_ctrlDateTime.GetTime(m_dt); 
double d = dt.m_dt; 
System::DateTime datum = System::DateTime::FromOADate(d); 

Sie könnten auch Folgendes tun (aber es wäre ähnlich verwirrend sein):

COleDateTime m_dt; 
m_ctrlDateTime.GetTime(m_dt); 
double d = dt.m_dt; 
System::DateTime datum; 
datum = datum.FromOADate(d);