2016-06-16 3 views
0

yyMM001 형식의 데이터베이스에 int를 저장합니다. "yy"는 현재 연도의 마지막 두 자리 숫자이고 "MM"은 두 자리 숫자의 현재 월입니다. 마지막 세 자리는 001에서 월말까지 증가해야합니다. 다음 달 MM 값은 현재 달 숫자로 변경되어야하며 마지막 3 자리 숫자는 001에서 다시 시작해야합니다. 001년 및 월에 따라 숫자를 증가시키는 방법

 string year = System.DateTime.Now.ToString("yy"); 
     string month = System.DateTime.Now.ToString("MM"); 
     int no = 0; 
     string frmno; 
     IUD.Query = "Select MAX(Form_No) AS Form_No From tbl_Students"; 
     DataTable dtfm = IUD.FetchToDataBase(); 
     if (dtfm.Rows.Count > 0 && dtfm.Rows[0]["Form_No"].ToString() != string.Empty) 
     { 
      no = int.Parse(dtfm.Rows[0]["Form_No"].ToString()) + 1; 
      return no; 
     } 
     else 
     { 
      frmno = year + month + "001"; 
      no = int.Parse(frmno); 
      return no; 
     } 
나는 현재 월을 확인하고 달의 숫자와 마지막 세 자리를 변경할 수 if 상태에서 사용해야 어떤 방법

이어야 재시작 : 아래 코드인가? 아는 사람이 있으면 도와주세요. 감사합니다

+0

분할과 같은 문자열을 사용하고이 방법 . ###을 int로 구문 분석 한 다음 증분합니다. yyMM 부분과 증가 된 숫자로 문자열을 재생성하십시오. – Nkosi

답변

1

에 사용자 정의 형식을 변환,이 코드는 당신을 위해 작동합니다. 월과 올해의 일치, 그 값을 받아 1 그렇지 않으면하여 증가하면, 숫자 대신 문자열

var now = DateTime.Now; 
var decade = now.Year % 100; 
var month = now.Month; 
var decadeMonth = decade * 100 + month; 

no = dtfm.Rows[0]/1000 == decadeMonth ? dtfm.Rows[0] + 1 : decadeMonth * 1000 + 1; 

성능의 차를 이용하여, 001

var yearMon = dtfm.Rows[0].ToString().Substring(0,4); 
if (yearMon == DateTime.Now.ToString("yyMM")) { 
    no = dtfm.Rows[0] + 1; //assuming the database column is an int and not a varchar 
} else { 
    no = Int32.Parse(DateTime.Now.ToString("yyMM001")); 
} 

return no; 

다시 시작 또는 이 둘 사이에는 무시할 만하지만 숫자 버전이 약간 더 빠릅니다.

+0

감사합니다.이 코드는 정확하게 필요합니다. .Substring (0,4)은 처음 네 자리 숫자를 가져 오는 데 필요한 방법입니다. 이 도움에 감사드립니다. –

0

이 시도 : 당신은 그냥 $"{yy}{MM}{yourNumber}"을해야

for (var i = 0; i < 999 + 1; i++) 
      { 
       var yy =DateTime.Now.ToString("yy"); 
       var mm = DateTime.Now.ToString("MM"); 

       var num = $"{yy}{mm}{i.ToString("D3"),3}"; 
       Console.WriteLine(num); 
      } 

을;

0

맞춤 전화 번호를 DateTime으로 변환하고 하루를 추가 한 다음 사용자 설정 형식으로 다시 변환하는 것이 좋습니다. 내가 질문을 이해한다면

DateTime

int myCustomDate = 1606016; // June 16, 16 

int day = myCustomDate % 1000; 
int month = (myCustomDate/1000) % 100; 
// Somehow you have to give it a century. Since you're using 2-digit years, 
// I'll assume current century. 
int year = 2000 + (myCustomDate/100000); 
DateTime dt = new DateTime(year, month, day); 


dt.AddDays(1); 

// then convert back to your number 
int newCustomDate = (100000 * dt.Year) + (1000 * dt.Month) + dt.Day; 
+0

시간을내어 솔루션을 제안 해 주셔서 감사합니다. 그러나 다른 코드가 나를 잘 처리했습니다. –

1

한 번 누르면 현재 Forn_No 다음 하나

public static string getNext(string Form_No) { 
    //Template: {YY}{MM}001 to {YY}{MM}999 
    var next = ""; 
    var prefix = Form_No.Substring(0, 4); 
    var nextNumber = Int32.Parse(Form_No.Substring(4)) + 1; 
    var aux = nextNumber.ToString("D3"); 
    next = string.Format("{0}{1}", prefix, aux); 
    return next; 
} 

를 생성합니다 주어진 그리고 다음에 ### 일에 YYMM의 부분 문자열에이

var date = System.DateTime.Now; 
string prefix = date.ToString("yyMM"); 
string frmno; 
IUD.Query = "Select MAX(Form_No) AS Form_No From tbl_Students WHERE Form_No LIKE " + prefix + "%"; 
DataTable dtfm = IUD.FetchToDataBase(); 
if (dtfm.Rows.Count > 0 && dtfm.Rows[0]["Form_No"].ToString() != string.Empty) 
{ 
    var max = dtfm.Rows[0]["Form_No"].ToString(); 
    frmno = getNext(max); 
    return frmno; 
} 
else 
{ 
    frmno = prefix + "001"; 
    return frmno; 
} 
+0

도와 주셔서 대단히 감사합니다. –

관련 문제