2016-06-16 2 views
0

Я сохраняю int в базе данных в формате yyMM001, где «yy» - это две последние цифры текущего года, «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 проверить текущий месяц и изменить месяцев цифры и последние три цифры должны быть рестарт от 001? Пожалуйста, помогите мне, если кто-нибудь знает. Благодаря

+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

Спасибо, это именно тот код, который мне нужен. . Substring (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

Спасибо, что помогли мне. –

Смежные вопросы