2016-06-16 69 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

非常感谢您的帮助。 –