Compartir a través de


Advertencia C26862

Se ha creado un objeto var de fecha y hora a partir de un tipo diferente de objeto de fecha y hora, pero la conversión estaba incompleta: expr

Esta regla se agregó en Visual Studio 2022 17.8.

Comentarios

El cumplimiento adecuado de las reglas de control de año bisiesto y día bisiesto requieren el seguimiento de la conversión adecuada entre objetos de fecha y hora de diferentes tipos, como la estructura de Windows SYSTEMTIME y la estructura de C tm . Los distintos tipos de fecha y hora pueden tener bases diferentes para los campos año, mes y día. Por ejemplo, SYSTEMTIME tiene un año basado en 0, pero campos de mes y día basados en 1. Por otro lado, tm tiene un año basado en 1900, un mes basado en 0 y un campo de día basado en 1. Para convertir un objeto de uno de estos tipos en un objeto de otro tipo, los campos year, month y day deben ajustarse adecuadamente.

Nombre de análisis de código: INCOMPLETE_DATETIME_CONVERSION

Ejemplo

El código siguiente intenta convertir una instancia de tm en una instancia de SYSTEMTIME. Realiza el ajuste necesario en el campo año, pero no ajusta correctamente el campo mes:

#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; 
} 

Para corregir este problema, ajuste los campos mes y año:

#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; 
} 

Heurística

Esta regla solo reconoce la estructura de Windows SYSTEMTIME y la estructura de C tm .

Esta regla es una regla de participación, lo que significa que el análisis de código debe usar un archivo de conjunto de reglas y la regla debe incluirse explícitamente en el archivo del conjunto de reglas y habilitarla para que se aplique. Para obtener más información sobre cómo crear un conjunto de reglas personalizado para el análisis de código, vea Usar conjuntos de reglas para especificar las C++ reglas que se van a ejecutar.

Consulte también

C6393
C6394
C26861
C26863
C26864