Warnung C26862
Ein Datum-Uhrzeit-Objekt
var
wurde aus einem anderen Typ von Datum-Uhrzeit-Objekt erstellt, die Konvertierung war jedoch unvollständig:expr
Diese Regel wurde in Visual Studio 2022 17.8 hinzugefügt.
Hinweise
Die ordnungsgemäße Erzwingung von Regeln für die Behandlung von Schaltjahren und Schalttags erfordert das Nachverfolgen der richtigen Konvertierung zwischen Datums-/Uhrzeitobjekten verschiedener Typen wie der Windows-Struktur SYSTEMTIME
und der C-Struktur tm
. Unterschiedliche Datums-/Uhrzeittypen können unterschiedliche Basisen für die Felder "Jahr", "Monat" und "Tag" aufweisen. Beispielsweise SYSTEMTIME
enthält ein 0-basiertes Jahr, aber 1-basierte Monats- und Tagesfelder. Auf der anderen Seite tm
gibt es ein 1900-basiertes Jahr, einen 0-basierten Monat und ein 1-basiertes Tag-Feld. Um ein Objekt eines dieser Typen in ein Objekt eines anderen Typs zu konvertieren, müssen die Felder "Jahr", "Monat" und "Tag" entsprechend angepasst werden.
Codeanalysename: INCOMPLETE_DATETIME_CONVERSION
Beispiel
Der folgende Code versucht, eine Instanz von in eine Instanz von tm
SYSTEMTIME
. Sie nimmt die erforderliche Anpassung an das Feld "Jahr" vor, passt aber das Feld "Monat" nicht ordnungsgemäß an:
#include <Windows.h>
#include <ctime>
void ConvertTmToSystemTime1b(const tm& tm)
{
SYSTEMTIME st;
st.wYear = tm.tm_year + 1900;
st.wMonth = tm.tm_mon; // C26862, Adjustment is missing
st.wDay = tm.tm_mday;
}
Um dieses Problem zu beheben, passen Sie die Felder "Monat" und "Jahr" an:
#include <Windows.h>
#include <ctime>
void ConvertTmToSystemTime(const tm& tm)
{
SYSTEMTIME st;
st.wYear = tm.tm_year + 1900;
st.wMonth = tm.tm_mon + 1;
st.wDay = tm.tm_mday;
}
Heuristik
Diese Regel erkennt nur die Windows-Struktur SYSTEMTIME
und die C-Struktur tm
.
Diese Regel ist eine Opt-In-Regel, d. h. die Codeanalyse sollte eine Regeldatei verwenden, und die Regel sollte explizit in die Regeldatei aufgenommen und aktiviert werden, damit sie angewendet werden kann. Weitere Informationen zum Erstellen eines benutzerdefinierten Regelsets für die Codeanalyse finden Sie unter Verwenden von Regelsätzen zum Angeben der C++
auszuführenden Regeln.