0

オーダー ID を自動的に生成するこのアプリケーションがあります。9999-99-9999最初の 4 つの数字は年を表します。現在、2 番目は月で、最後は自動インクリメントです。

私は今、月である2番目のものに取り組んでいます。したがって、私のコードでは、ゼロを追加できるように、それが 2 桁の数字か 1 桁の数字かを知る必要があります。アプリケーションを実行すると、入力文字列が正しい形式ではないというエラーが表示されます。どういう意味ですか?コードにエラーはありますか?

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 に答える