Skip to content

Latest commit

 

History

History
64 lines (47 loc) · 2.33 KB

c26862.md

File metadata and controls

64 lines (47 loc) · 2.33 KB
descriptiontitlems.datef1_keywordshelpviewer_keywords
Learn more about: Warning C26862
Warning C26862
11/29/2023
C26862
INCOMPLETE_DATETIME_CONVERSION
__WARNING_INCOMPLETE_DATETIME_CONVERSION
C26862

Warning C26862

A date-time object var has been created from a different type of date-time object but conversion was incomplete: expr

This rule was added in Visual Studio 2022 17.8.

Remarks

Proper enforcement of leap year and leap day handling rules require tracking the proper conversion between date-time objects of different types such as the Windows SYSTEMTIME struct and the C tm struct. Different date-time types may have different bases for the year, month, and day fields. For example, SYSTEMTIME has a 0-based year, but 1-based month and day fields. On the other hand, tm has a 1900-based year, a 0-based month, and a 1-based day fields. To convert an object of one of these types to an object of another type, the year, month, and day fields must be adjusted appropriately.

Code analysis name: INCOMPLETE_DATETIME_CONVERSION

Example

The following code tries to convert an instance of tm into an instance of SYSTEMTIME. It makes the necessary adjustment to the year field, but doesn't properly adjust the month field:

#include<Windows.h> #include<ctime>voidConvertTmToSystemTime1b(consttm& tm) { SYSTEMTIME st; st.wYear = tm.tm_year + 1900; st.wMonth = tm.tm_mon; // C26862, Adjustment is missing  st.wDay = tm.tm_mday; } 

To fix this problem, adjust the month and year fields:

#include<Windows.h> #include<ctime>voidConvertTmToSystemTime(consttm& tm) { SYSTEMTIME st; st.wYear = tm.tm_year + 1900; st.wMonth = tm.tm_mon + 1; st.wDay = tm.tm_mday; } 

Heuristics

This rule only recognizes the Windows SYSTEMTIME struct and the C tm struct.

This rule is an opt-in rule, meaning that code analysis should use a ruleset file, and the rule should be explicitly included in the ruleset file, and enabled for it to be applied. For more information on creating a custom ruleset for code analysis, see Use Rule Sets to Specify the C++ Rules to Run.

See also

C6393
C6394
C26861
C26863
C26864

close