输入字符串格式不正确[c#]
本文关键字:不正确 字符串 格式 输入 | 更新日期: 2023-09-27 18:13:33
我有这个自动生成订单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)
这真的不清楚你想要实现什么-为什么你会期望一个解析的年份小于10?除非你真的期待一些严重损坏的系统时钟,否则没有必要这样做。
但是你根本不需要分别转换年和月:
string orderId = DateTime.UtcNow.ToString("yyyy-MM",
CultureInfo.InvariantCulture);
请注意,使用UtcNow
通常是比使用系统本地时区更好的主意-尽管如果您真的到想要使用系统本地时区,您可以更改它。
如果当前区域的默认日历系统是非公历的,使用CultureInfo.InvariantCulture
将避免它转换为不同的日历系统,并且还避免使用非不变的格式信息。(后者在本例中不是问题,但在其他格式字符串中很容易成为问题。)
当然,您需要添加自动递增部分,但这是另一回事。
该错误意味着您试图解析整数的字符串实际上不包含有效整数。你可以使用Int。TryParse而不是
问题是你使用了破折号…
order_ID += "-";
…然后你试图将其转换为int
if (Convert.ToInt32(order_ID) < 10)
你不能把它变成整数。使用TryParse()方法可能会更幸运。
所以,你需要稍微调整一下你的代码
可以在不同的时间添加-,或者在转换为int
时删除它 if (Convert.ToInt32(order_ID.Replace("-","") < 10)
对于您的代码:
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的解决方案更简单,更优雅。
似乎程序无法将order_ID
转换为整数,因为它包含-
,
实际上你不需要这样做,只需要使用这个:
string order_ID = DateTime.Now.ToString("yyyy-MM");