2

ユーザー入力が有効な日付または有効な「日付 + 時間」であるかどうかを確認するのは簡単です。.NET が提供しますDateTime.TryParse(さらに、VB.NET も提供しますIsDate)。

ここで、ユーザーが時間コンポーネントを含む日付を入力したかどうかを確認したいと思います。したがって、ドイツ語ロケールを使用する場合は31.12.2010 00:00問題ないはずですが、そうで31.12.2010はありません。

次のようにDateTime.TryParseExactを使用できることはわかっています。

Dim formats() As String = {"d.M.yyyy H:mm:ss", "dd.M.yyyy H:mm:ss", _
                           "d.MM.yyyy H:mm:ss", "d.MM.yyyy H:mm:ss", _
                           "d.M.yyyy H:mm", ...}
Dim result = DateTime.TryParseExact(userInput, formats, _
       Globalization.CultureInfo.CurrentCulture, ..., result)

しかし、日付を指定するドイツ語の形式 (日、月、年) をハードコーディングします。これは悪い習慣と見なされており、アプリケーションをローカライズしたい場合に問題が発生します。さらに、formatsすべての可能な組み合わせ (1 桁、2 桁、...) の非常に大きなリストになります。

よりエレガントなソリューションはありますか?

4

3 に答える 3

2

これがあなたがすでに持っているものよりエレガントかどうかはわかりませんが、どうですか:

  • トリミングされた入力をスペースで分割
  • 最後TimeSpan.TryParseのピースに
  • これが成功した場合は、結果の値がTimeSpan負でなく、1 日未満であることを確認します

文字列全体に加えて、これらすべてをDateTime.TryParse実行すると、指定された時間コンポーネントがあることをより確信できるはずです。

于 2010-04-21T10:08:09.083 に答える
1

ユーザー入力、日付をテキストボックス(またはその他)に分割し、時間を別のボックスに分割する必要があると思います。

別の解決策は、d/m/y の順序を強制せずに、すべての文化で同じ MM:SS を強制する、ある種のマスクされたコントロールを使用することです。

質問に対する答えではありませんが、hth

于 2010-04-21T14:17:06.763 に答える
0

カルチャの日付/時刻形式オプションは、CultureInfo.DateTimeFormatプロパティから取得できます。たとえば、現在のカルチャの完全な日付/時刻パターンを取得するには、次のようにアクセスします。

CultureInfo.CurrentCulture.DateTimeFormat.FullDateTimePattern

私にとって、英国では、これにより次のことが得られます。

dd MMMM yyyy HH:mm:ss
于 2010-04-21T09:47:02.227 に答える