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

时间:2013-05-15 09:09:53

标签: c# winforms typeconverter

我有这个自动生成订单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)

5 个答案:

答案 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");