C# 如何根据年份和月份增加数字

C# 如何根据年份和月份增加数字,c#,C#,我在数据库中以yyMM001格式存储一个int,其中“yy”是当前年份的最后两位数字,“MM”是当前月份的两位数字,最后三位数字应该从001增加到月末。下一个月的MM值应更改为当前月份的数字,最后三个数字应再次从001重新启动。 代码如下: string year = System.DateTime.Now.ToString("yy"); string month = System.DateTime.Now.ToString("MM"); int

我在数据库中以yyMM001格式存储一个int,其中“yy”是当前年份的最后两位数字,“MM”是当前月份的两位数字,最后三位数字应该从001增加到月末。下一个月的MM值应更改为当前月份的数字,最后三个数字应再次从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重新启动? 如果有人知道,请帮助我。谢谢

试试这个:

 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);
            }
for(变量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}”;
控制台写入线(num);
}

你只需要做
$“{yy}{MM}{yourNumber}”

您最好将自定义号码转换为
日期时间
,添加一天,然后再转换回自定义格式

从自定义格式转换为
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;

如果我理解这个问题,这个代码应该适合你。如果月份和年份匹配,则取该值并将其递增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;

两者之间的性能差异可以忽略不计,但数字版本的速度稍快。

此方法一旦给定当前Forn_No,将生成下一个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;
}

将字符串拆分为子字符串,其中一部分为yyMM,下一部分为###。将###解析为int,然后递增。重新创建一个带有yyMM部分和递增数字的字符串。非常感谢您的帮助。感谢先生给我时间建议解决方案。但是另一个代码对我很有用。谢谢,这就是我需要的代码。子字符串(0,4)是获取前4位数字所需的方式。谢谢你的帮助。