web-dev-qa-db-ja.com

DateTime形式を検証する方法は?

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

19
Kevin Cho

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

10
Jason

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

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.");
}
24
Hans Z

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

このため、あなたはそれを往復することができます:

    private bool IsValidDateFormat(string dateFormat)
    {
        try
        {
            String dts=DateTime.Now.ToString(dateFormat);
            DateTime.ParseExact(dts, dateFormat, CultureInfo.InvariantCulture);
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }
5
ZipXap

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

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

標準(1文字)
カスタム(> 1文字)

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

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

qなどの他の文字自体は無効です。他のすべての文字列は、フォーマット文字列として正常に解析されます。

3
Guvante

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

とにかく、数人がDateTime.TryParse()メソッドを使用して素材を処理することを提案しました。しかし、とにかくフォーマットを指定する必要があります!だから魔法はありません!そうでなければ、あいまいに陥ります

0
Diego De Vita

これは私のために働く

try
{
  String formattedDate = DateTime.Now.ToString(dateFormat);
  DateTime.Parse(formattedDate);
  return true;
}
catch (Exception)
{
  return false;
}
0
akash singh

私の解決策は、入力フィールドを読み取り専用としてマークし、ユーザーが jqueryui datepicker によってのみ値を変更できるようにすることでした。

直感的です。好みのフォーマットを指定でき、この1つのフォーマットのみを検証する必要があります。

0