Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se ha creado un objeto
varde 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.