C# 如何根据年份和月份增加数字
我在数据库中以yyMM001格式存储一个int,其中“yy”是当前年份的最后两位数字,“MM”是当前月份的两位数字,最后三位数字应该从001增加到月末。下一个月的MM值应更改为当前月份的数字,最后三个数字应再次从001重新启动。 代码如下: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
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位数字所需的方式。谢谢你的帮助。