申請書を作成しています。アプリケーションは、 などの日付形式を使用します
"2012-11-21 15:22:35"
。
フォーマットが であることはすでに知っています"yyyy-MM-dd HH:mm:ss"
。しかし、任意の入力文字列の日付と時刻の形式をプログラムで見つけるにはどうすればよいですか? これを行う方法はありますか?
4 に答える
月の値が <= 12 の日付文字列で問題が発生すると思います。これは、その文字列の形式が"yyyy-MM-dd"
または"yyyy-dd-MM"
パーサーに設定を入れない限り、どちらが正しいかを知る方法はありません。
例:
2012/08/07
- 「これは 7 月か 8 月でしょうか?」
あなたはそれを総当たりして、フォーマットに一致するCultureInfoがあることを願うことができます
var datestring = "2012-10-05 12:00:03";
DateTime time;
var matchingCulture = CultureInfo.GetCultures(CultureTypes.AllCultures).FirstOrDefault(ci => DateTime.TryParse(datestring, ci, DateTimeStyles.None, out time))
フォーマットを認識したい場合、これを 100% 確実に行う方法はほとんどありません。ただし、given でサポートされているすべての形式を確認したい場合がCultureInfo
ありTryParse
ます。残念ながら、次のように年、月、日が何であるかを伝える方法がないため、これは間違った結果をもたらす可能性があります。
10/11/12
文化的な偏見に応じて、2012 年 10 月 11 日と解釈することができます。2012 年 11 月 10 日または 2010 年 11 月 12 日。
日付で何をしたいかについて言及していないので、通常のベストプラクティスのみを紹介します。
- アプリケーションの異なるモジュール間で日付を転送する場合は、不変の日付形式を使用してください。
- 日付と時刻の書式を設定する必要がある場合は、特定のカルチャの既定の日付形式を使用してください。
- デフォルトの日付形式について言えば、エンド ユーザーが入力した日付を受け入れたい場合は、カルチャのデフォルト形式で自由形式の入力を解析するか、日時ピッカー コントロールを作成 (または既存のものを使用) することができます。後者の方法が好ましい。
広告 1. 不変の日付と時刻の形式に変換するには:
DateTime now = DateTime.UtcNow;
string formatted = now.ToUniversalTime.ToString(CultureInfo.InvariantCulture);
または ( ISO8601 のような形式に変換するには):
string formatted = now.ToString("u");
同様に、不変形式から DateTime を解析できます。
DateTime result;
string source = "11/20/2012 11:22:33";
if (DateTime.TryParse(source, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out result))
{
// do something with result
}
または (ユニバーサル形式では CultureInfo は必要ありません):
DateTime result;
string source = "2012-11-20 11:22:33Z";
if (DateTime.TryParse(source, out result))
{
// do something
}
広告 2 & 3. 特定のカルチャの書式設定と解析は、不変の日付の書式設定と解析に似ていますが、InvariantCulture を検出された特定のインスタンス (たとえば、CultureInfo.CurrentCulture
.
アプリケーションの種類によっては、専用の Calendar コントロール、つまりjQuery UI Datepickerを使用したい場合があります。
以下のコードを使用します。
文字列 sysFormat = CultureInfo.CurrentCulture.DateTimeFormat;