2016-06-16 67 views
0

我以yyMM001格式在數據庫中存儲了一個int,其中「yy」是當前年份的最後兩位數字,「MM」是當前月份的兩位數字後三位數字應從001到月底增加。並且下個月的MM值應該更改爲當前的月份數字,最後三位數字應該從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

分割使用的字符串轉換成字符串與YYMM一部分,###在未來。將###解析爲int然後遞增。用yyMM部分重新創建一個字符串並增加數字。 – Nkosi

回答

1

如果我理解這個問題,這個代碼應該爲你工作。如果年份和月份的比賽,它需要的價值,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; 

再次啓動或者使用數字,而不是字符串

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; 

的性能差異在兩者之間可以忽略不計,但數字版本稍快。

+0

謝謝,這是我需要的代碼。。子串(0,4)是我需要獲取前4位數字的方式。感謝您的幫助。 –

0

試試這個:

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

你只需要做出$"{yy}{MM}{yourNumber}";

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

而且在一個這樣的

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

非常感謝您的幫助。 –