Fettes Prob mit CTime



  • Guten Morgen,

    hab vor die zeilen meines listviews farbig zu zeichnen in abhängigkeit einer
    bedingung, eines datum, welches in spalte 5 steht. das datum hat das format
    dd.mm.yy. das zerlege ich dann und füttere den standard-konstruktor von ctime damit. in mHeute steht das aktuelle datum. dann vergleich von akt. datum und datum aus der liste.
    zerlegung, aktuelles datum ist def. korrekt. auch die erhaltenen sec seit 1970 sind abs. plausibel.
    nur irgendwas stimmt mit dem jahr nicht! die list wird anfangs korrekt gefärbt und dann beim scrollen kommt: 'Expression nYear >= 1900'. ausgelöst durch:
    ASSERT(nYear >= 1900);
    atm.tm_year = nYear - 1900; im ctime konstruktor.
    das datum an der stelle ist kein besonderes: '13.05.2013'
    schreib ich hier: CTime ablauf(2013, iMonth, iDay, 0, 0, 0); also ein festes
    jahr rein, kommt der fehler nicht. ist aber nat. nicht sinn der sache.

    kann mir das seit 3 stunden nicht erklären 😕
    für hilfe wäre ich wirklich dankbar.

    hier die customdraw-methode.

    gruss
    der ferngesteuerte

    void CVerWizView::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	LPNMLVCUSTOMDRAW  lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
    	CListCtrl &cList = GetListCtrl();
    
    	switch(lplvcd->nmcd.dwDrawStage)
    	{
    	case CDDS_PREPAINT:
    	 *pResult = CDRF_NOTIFYITEMDRAW;       
    	 break;
    
    	case CDDS_ITEMPREPAINT:
    	 *pResult = CDRF_DODEFAULT;
             //Datum holen
    	CString date_range = cList.GetItemText(lplvcd->nmcd.dwItemSpec, 5);
    	//zerlegen
             date_range.Remove('.');
    	CString year = date_range.Right(4); 
    	int iYear = atoi( year );
    
    	CString month = date_range.Mid(2,2); 
    	if(month.Left(1) == '0') month.Remove('0'); 
    	int iMonth = atoi( month );
    
    	CString day = date_range.Left(2); 
    	if(day.Left(1) == '0') day.Remove('0'); 
    	int iDay = atoi( day );
    
    	CTime ablauf(iYear, iMonth, iDay, 0, 0, 0); //<- hier passierts wohl
    
    	if(ablauf > mHeute) //mHeute = CTime::GetCurrentTime(); def. in InitUpd.
    	 {
    	 lplvcd->clrText = RGB(255, 0, 0);
    	 *pResult = CDRF_NEWFONT;
    	 }
        }
    }
    


  • Auf was für ein iYear kommt er denn?



  • Hallo peterchen,

    scheint, als ob du für mich exklusiv zuständig bis.
    sonst redet ja keiner mit mir 😃
    vielen dank.

    habs heute morgen um 4 Uhr !!! noch rausgefunden.
    ein ochse von user hat einen vertragsablauf mit datum 0014-05-13 in die datenbank eingetragen. damit hatte ich nicht gerechnet. eigentlich sollte unser webfuzzi die felder validieren, damit sowas nicht eingetragen wird.
    (hab den einlauf schon vorbereitet 🙂 )

    nachdem ich das auf 2014 geändert hab, kommt der fehler auch nicht mehr.

    schönen sonntag

    gruss
    der ferngesteuerte


Anmelden zum Antworten