我有这个自动生成订单ID的应用程序。现在我希望它像9999-99-9999
一样,前四个数字代表年份。现在,第二个是月份,最后一个是自动递增。
我现在在第二个月工作。因此,在我的代码中,我必须知道它是一个两位数字还是一位数字,以便我可以添加一个零。当我运行应用程序时,会出现一个错误,指出输入字符串的格式不正确。这是什么意思?我的代码中有错误吗?
private void btnOk_Click(object sender, EventArgs e)
{
string order_ID = DateTime.Now.Year.ToString();
order_ID += "-";
if (Convert.ToInt32(order_ID) < 10)
{
order_ID += "0";
}
order_ID += DateTime.Now.Month.ToString();
}
错误在此行Convert.ToInt32(order_ID)
。
答案 0 :(得分:5)
目前还不清楚你想要实现的目标是什么 - 为什么你认为解析的年份不会超过10?除非你真的期待一些严重损坏的系统时钟,否则没有必要这样做。
但您根本不需要单独转换年份和月份:
string orderId = DateTime.UtcNow.ToString("yyyy-MM",
CultureInfo.InvariantCulture);
请注意,使用UtcNow
通常比使用系统本地时区更好 - 但如果您确实 想要使用系统本地时区,则可以更改它。
如果当前文化的默认日历系统是非公历系统,CultureInfo.InvariantCulture
的使用将避免它转换为不同的日历系统,并且还避免使用非不变格式信息。 (在这种情况下,后者不会成为问题,但很容易成为其他格式字符串的问题。)
然后你需要添加自动增量部分,但这是另一回事。
答案 1 :(得分:1)
错误意味着您尝试解析整数的字符串实际上不包含有效整数。您可以使用Int.TryParse代替
答案 2 :(得分:1)
问题是你正在使用破折号...
order_ID += "-";
...然后您尝试将其转换为int
if (Convert.ToInt32(order_ID) < 10)
你不能把它变成整数。使用TryParse()方法可能会更幸运。
所以,你需要稍微重复一下你的代码。
在不同的时间添加 - 或在转换为int
时删除它 if (Convert.ToInt32(order_ID.Replace("-","") < 10)
答案 3 :(得分:1)
代码:
private void btnOk_Click(object sender, EventArgs e)
{
string order_ID = DateTime.Now.Year.ToString();
if (DateTime.Now.Month < 10)
{
order_ID += "0";
}
order_ID += "-";
order_ID += DateTime.Now.Month.ToString();
}
但是Mehran的解决方案更容易,更优雅。
答案 4 :(得分:0)
似乎该程序未能将您的order_ID
转换为整数,因为它包含-
,
你实际上不需要这样做只是使用它:
string order_ID = DateTime.Now.ToString("yyyy-MM");