C#.NetでDateTime.TryParse
APIを使用していました。下記のコードをご覧ください:日付要素区切り記号または区切り文字に関するDateTime.TryParse APIの内部動作
DateTime dt;
//Behavior # 1 : forward slash date separator
bool parsed = DateTime.TryParse("2016/12/01", out dt); //returns true. Date Value 01 December 2016
//Behavior # 2 : dot date separator
parsed = DateTime.TryParse("2016.12.02", out dt); //returns true. Date Value 02 December 2016
//Behavior # 3 : dot date separator
parsed = DateTime.TryParse("2016-12-03", out dt); //returns true. Date Value 03 December 2016
//Behavior # 4 : comma date separator
parsed = DateTime.TryParse("2016,12,04", out dt); //returns true. Date Value 04 December 2016
//Behavior # 5 : space date separator
parsed = DateTime.TryParse("2016 12 05", out dt); //returns true. Date Value 05 December 2016
最初の3つの動作は私には問題ありません。私は既に/
と-
が日付区切り文字として使用されていることを認識していました。今日、私は、ドイツ語の日付形式では日付の区切り文字として.
を使用していることに気付きました。だから私は先に進み、APIが有効な日付区切り文字としてコンマ,
と空白をどのように扱うことができるかについて調べようとしました。私は、コードを次のように書いた:文字以下
var allLanguageDateDelimiters = new List<string>();
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
if(allLanguageDateDelimiters.All(x => x != ci.DateTimeFormat.DateSeparator))
{
allLanguageDateDelimiters.Add(ci.DateTimeFormat.DateSeparator);
Console.WriteLine(ci.DateTimeFormat.DateSeparator);
}
}
このコードを印刷:
- /(スラッシュ)
- 。 (ピリオド)
- - (ハイフン)
.
(末尾のスペース文字とピリオド)
だから基本的に私は世界のすべての文化を反復し、すべての文字がための区切り文字または区切り文字として使用されているものを考え出しました日付フィールド。そして、DateTime.TryParse
APIは、日付の区切り文字としてコンマ,
とスペースを含む日付文字列を正常に解析すると、#4と5の動作をどのようにして表示できますか?
DateTime.TryParse
APIの内部実装について教えてもらえますか?私の前提は、それがそうでない文字列を解析している間だけ既存のすべての文化の区切り文字に従うべきだということです。
これは、培養物のいずれかの日付を表現しながら、それがセパレータとして使用されていない場合であってものみ解析するために、明示的に(カンマの場合)、このサポートが含まれている示唆しています。これは、CSVとTSVがファイルにデータを格納するために使用される有名なフォーマットであると考えられます。 – RBT