3

1〜8文字の長さの文字列があります。それらを1日、1か月、1年に変換する必要があります。不足している部品については、現在のものを使用します。

私が今持っているコードはちょっと大きくて醜いです、そして誰かがこれをする方法についてもっと賢い考えを持っているかどうか疑問に思いました。

私の現在のコードは以下のとおりです。

var day = DateTime.Now.Day;
var month = DateTime.Now.Month;
var year = DateTime.Now.Year;

switch (digits.Length)
{
    case 1:
    case 2:
        day = int.Parse(digits.Substring(0));
        break;

    case 3:
    case 4:
        day = int.Parse(digits.Substring(0, 2));
        month = int.Parse(digits.Substring(2));
        break;
    case 5:
    case 6:
    case 7:
    case 8:
        day = int.Parse(digits.Substring(0, 2));
        month = int.Parse(digits.Substring(2, 2));
        year = int.Parse(digits.Substring(4));
        break;
    default:
        break;
}

注:これは文化を考慮に入れていないことを私は知っていますが、それは想定されていません:)

私はこのようにそれをやろうとしました:

day = int.Parse(digits.Substring(0, 2));
if(digits.Length > 2)
    month = int.Parse(digits.Substring(2, 2));
if(digits.Length > 4)
    year = int.Parse(digits.Substring(4, 4));

ただしArgumentOutOfRangeException、文字列の長さが1、3、5、6、または7桁の場合は、がスローされます...そのため、うまく機能しませんでした。Substringメソッドだけが、サブストリングを「埋める」のに十分な文字がなかったときに失敗するのではなく、できるだけ多くの文字を取得したとしたら...

これには正規表現を使用できますか?

4

4 に答える 4

7

TryParseExactメソッドを見てください。

DateTime date;
if (DateTime.TryParseExact(
    digits, 
    new[] { "dd", "ddMM", "ddMMyyyy" }, 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None, 
    out date))
{
    int day = date.Day;
    int month = date.Month;
    int year = date.Year;    
}
于 2010-01-06T15:01:13.000 に答える
0

数字列の右側に少し空白を埋め込むと、2番目のスニペットを機能させることができます。

digits += " ";
day = int.Parse(digits.Substring(0, 2));
if(digits.Length > 2)
    month = int.Parse(digits.Substring(2, 2));
if(digits.Length > 4)
    year = int.Parse(digits.Substring(4, 4));
于 2010-01-06T15:00:50.303 に答える
0

正規表現は良い解決策かもしれません。私の頭のてっぺんからこれは次のように見えるかもしれません:

^([0-9]{1,2})([0-9]{1,2})?([0-9]{1,4})?

これは、最大4つのグループを提供し、次のようにインデックスが付けられます。0-文字列全体1-最初の2桁(1桁しかない場合は1)2-2番目の桁のペア(3桁しかない場合は1)3-最後のセット1〜4桁の

于 2010-01-06T15:06:47.917 に答える
0

したがって、プログラムの場合、最初の2つの数値も日であり、38日= 3、月= 8のような日月ではありませんか?その日は常にゼロで、10歳未満でリードしますか?

于 2010-01-06T15:12:44.347 に答える