0

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

4

5 回答 5

5

真的不清楚你想用这个实现什么 - 为什么你会期望解析的年份小于 10?除非您真的期待一些严重损坏的系统时钟,否则没有必要这样做。

但是您根本不需要分别转换年份和月份:

string orderId = DateTime.UtcNow.ToString("yyyy-MM",
                                          CultureInfo.InvariantCulture);

请注意,使用UtcNow通常比使用系统本地时区更好 - 尽管如果您真的想要使用系统本地时区,您可以更改

CultureInfo.InvariantCulture如果当前区域性的默认日历系统是非公历,则使用将避免将其转换为不同的日历系统,并且还会避免使用非不变的格式信息。(在这种情况下后者不会成为问题,但很容易成为其他格式字符串的问题。)

当然,您随后需要添加自动增量部分,但那是另一回事。

于 2013-05-15T09:13:50.377 回答
1

该错误意味着您尝试从中解析整数的字符串实际上并不包含有效的整数。您可以改用Int.TryParse

于 2013-05-15T09:12:18.290 回答
1

错误是您使用的是破折号...

order_ID += "-";

...然后您尝试将其转换为int

    if (Convert.ToInt32(order_ID) < 10)

您不能将其设为整数。TryParse() 方法可能会让您更幸运。

所以,你需要重新弄乱你的代码。

在不同的时间添加 - 或在转换为 int 时将其删除

    if (Convert.ToInt32(order_ID.Replace("-","") < 10)
于 2013-05-15T09:13:09.707 回答
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 的解决方案更简单、最优雅。

于 2013-05-15T09:18:52.663 回答
0

似乎该程序未能将您转换order_ID为整数,因为它包含-

你实际上不需要这样做,只需使用这个:

string order_ID = DateTime.Now.ToString("yyyy-MM");
于 2013-05-15T09:13:00.857 回答