2012-04-17 2 views
0

텍스트 파일에서 각 행을 읽는 클래스의 메서드를 사용하고 있습니다. 텍스트 파일에 헤더 영역에 하나의 날짜 필드가 있습니다.C#의 날짜 필드 업데이트

다른 광고 항목에는 일부 계정 정보가 포함되어 있습니다. 이 코드는 각 광고 항목에서 데이터를 읽습니다. 광고 항목의 계정 코드를 기반으로 날짜를 업데이트하고 싶습니다. 그러나 아래에 표시된 계정 코드 중 하나를 발견 할 때마다 날짜를 한 번만 업데이트하려고합니다. 내 경우에는 코드가 이러한 계정 코드를 발견 할 때마다 날짜를 업데이트하고 있습니다.

는 헤더 날짜/2천12분의 12 04이다 '와 첫 번째 줄 항목에 대한 계정 코드가 다음 날짜에 "2012년 4월 10일"을 업데이트 할 것입니다 "140901"입니다 가정하자.
이제 두 번째 줄 항목에 계정 코드 "141202"가 포함 된 경우 날짜가 다시 "04/08/2012"로 업데이트됩니다. 날짜가 "04/10/2012"로 업데이트되고 일부 계정 코드가 발견 되더라도 업데이트가 중지됩니다.

은, 제가 뭘 잘못 알려 주시기 바랍니다.

public void UpdateDate(HeaderRecord _header, AccountSeries accountCode) 
{ 
    DateTime date = _header.Date; 

    bool dateChanged = false; 

    if (!dateChanged) 
    { 
     if (accountCode.Code == "140901" || accountCode.Code == "141202" || 
      accountCode.Code == "141207" || accountCode.Code == "141303" || 
      accountCode.Code == "141301" || accountCode.Code == "141001" || 
      accountCode.Code == "141004" || accountCode.Code == "141003" || 
      accountCode.Code == "141005")  
     { 
      if (!CalendarValidatorHelper.Helper(date.AddDays(-2.0))) 
      { 
       if (!CalendarValidatorHelper.Helper(date.AddDays(-3.0))) 
       { 
        date = date.AddDays(-3.0); 
        _header.Date = date; 
        dateChanged = true; 
       } 
       else if (!CalendarValidatorHelper.Helper(date.AddDays(-4.0))) 
       { 
        date = date.AddDays(-4.0); 
        _header.Date = date; 
        dateChanged = true; 
       } 
       else if (!CalendarValidatorHelper.Helper(date.AddDays(-5.0))) 
       { 
        date = date.AddDays(-5.0); 
        _header.Date = date; 
        dateChanged = true; 
       } 
      } 
      else 
      { 
       date = date.AddDays(-2.0); 
       _header.Date = date; 
       dateChanged = true; 
      } 
     } 
    } 
} 
+0

위의 코드의 약자로

, 변수'dateChanged'는 지역의 하나이며 정말 방법이 종료하기 때문에 사용되지 않습니다. 'if (! dateChanged)'블록은 항상 입력되고, 변수'dateChanged'는 결코 다시 읽혀지지 않습니다. 메서드가 두 번째로 입력되면 물론 새로운 'dateChanged'입니다. –

답변

1

할당하려는 새 날짜가 현재 날짜보다 작은 지 테스트해야하는 것처럼 보입니다. IE

date = date.AddDays(-3); 

if(_header.Date < date) 
{ 
    _header.Date = date; 
    dateChanged = true; 
} 
+0

헤더 날짜는 임의의 날짜가 될 수 있습니다. 반드시 현재 날짜는 아닙니다. – ncoder

+0

그러면 dateChanged == true를 테스트하기 만하면됩니다. IE :'if (! dateChanged) {_header.Date = date; dateChanged = true; }' – Tejs