Aracılığıyla paylaş


Uyarı C26862

Farklı bir tarih-saat nesnesi var türünden bir tarih-saat nesnesi oluşturuldu ancak dönüştürme tamamlanmadı: expr

Bu kural Visual Studio 2022 17.8'e eklendi.

Açıklamalar

Artık yıl ve artık gün işleme kurallarının uygun şekilde uygulanması için Windows SYSTEMTIME yapısı ve C tm yapısı gibi farklı türlerdeki tarih-saat nesneleri arasında doğru dönüştürmenin izlenmesi gerekir. Farklı tarih-saat türlerinin yıl, ay ve gün alanları için farklı temelleri olabilir. Örneğin, SYSTEMTIME 0 tabanlı bir yıl, ancak 1 tabanlı ay ve gün alanları vardır. Öte yandan tm 1900 tabanlı yıl, 0 tabanlı ay ve 1 tabanlı gün alanları vardır. Bu türlerden birinin nesnesini başka türde bir nesneye dönüştürmek için yıl, ay ve gün alanlarının uygun şekilde ayarlanması gerekir.

Kod analizi adı: INCOMPLETE_DATETIME_CONVERSION

Örnek

Aşağıdaki kod, örneğini tm örneğine dönüştürmeye SYSTEMTIMEçalışır. Yıl alanında gerekli ayarlamayı yapar, ancak ay alanını düzgün ayarlamaz:

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

Bu sorunu çözmek için ay ve yıl alanlarını ayarlayın:

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

Buluşsal yöntemler

Bu kural yalnızca Windows SYSTEMTIME yapısını ve C tm yapısını tanır.

Bu kural bir kabul kuralıdır, yani kod analizi bir kural kümesi dosyası kullanmalıdır ve kuralın kural kümesi dosyasına açıkça eklenmesi ve uygulanması için etkinleştirilmesi gerekir. Kod analizi için özel kural kümesi oluşturma hakkında daha fazla bilgi için bkz. Çalıştırılacak Kuralları Belirtmek C++ için Kural Kümelerini Kullanma.

Ayrıca bkz.

C6393
C6394
C26861
C26863
C26864