输入字符串格式不正确[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)

输入字符串格式不正确[c#]

这真的不清楚你想要实现什么-为什么你会期望一个解析的年份小于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");