22

ユーザーが DateTime 形式を入力できるようにすることを想定していますが、それが受け入れられるかどうかを確認するために検証する必要があります。ユーザーは「yyyy-MM-dd」と入力しても問題ありませんが、「MM/yyyyMM/ddd」またはその他の組み合わせを入力することもできます。これを検証する方法はありますか?

4

7 に答える 7

23

このようなものをお探しですか?

DateTime expectedDate;
if (!DateTime.TryParse("07/27/2012", out expectedDate))
{
    Console.Write("Luke I am not your datetime.... NOOO!!!!!!!!!!!!!!");
}

ユーザーが必要な正確な形式を知っている場合...

string[] formats = { "MM/dd/yyyy", "M/d/yyyy", "M/dd/yyyy", "MM/d/yyyy" };
DateTime expectedDate;
if (!DateTime.TryParseExact("07/27/2012", formats, new CultureInfo("en-US"), 
                            DateTimeStyles.None, out expectedDate))
{
    Console.Write("Thank you Mario, but the DateTime is in another format.");
}
于 2012-07-27T21:48:39.433 に答える
11

指定されたフォーマット文字列が有効かどうか知りたいと思います...

このために、往復することができます:

private bool IsValidDateFormat(string dateFormat)
{
    try
    {
        String dts=DateTime.Now.ToString(dateFormat, CultureInfo.InvariantCulture);
        DateTime.ParseExact(dts, dateFormat, CultureInfo.InvariantCulture);
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}
于 2013-10-04T18:18:22.267 に答える
11

入力する形式を実際に検証する方法はわかりません。何かに変換される文字を意図的に含めたい場合があるためです。検討できることの 1 つは、入力した形式が変換されたもののプレビューを表示することで、ユーザーが自己検証できるようにすることです。

于 2012-07-27T22:00:07.607 に答える
3

私の記憶が間違っていない限り、無効な DateTime 形式の文字列は 1 文字だけです。2 文字以上の DateTime 形式の文字列が有効であると想定できます。

DateTime.ParseExact("qq", "qq", null) == DateTime.Today
DateTime.ParseExact("myy", "501", null) == "05/01/2001"

標準 (1 文字)
カスタム (1 文字以上)

参考までに、単一の文字列をフォーマットとして許可しました:

d,D,f,F,g,G,m,M,o,O,r,R,s,T,u,U,y,Y

などのその他の文字は、q単独では無効です。他のすべての文字列は、書式設定文字列として正常に解析されます。

于 2012-07-27T21:54:43.363 に答える
0

検証戦略については話しません。とにかく、正規表現を含むものを使用し、許可されたパターンを適用する必要があります。これは正式な有効性に反するのに役立ちます..次に、実際の内容に注意し、月、日、年に従って値が正しいことを確認する必要があります。

とにかく、何人かの人々が DateTime.TryParse() メソッドを使用して、サブストレートに面倒を見てもらうことを提案しました。ただし、とにかく形式を指定する必要があります。だから魔法はありません!そうしないと、あいまいになります

于 2012-07-27T21:58:40.067 に答える