1

Month DD, YYYYこの形式の文字列をDateTimeオブジェクトに変換したいのですが、ここではパフォーマンスが非常に重要です。

文字列の例:

string AlaaJoseph = "October 23, 1996";
string JennetteMcCurdy = "June 26, 1992";
4

4 に答える 4

7
DateTime dt = DateTime.ParseExact("October 23, 1996",
                                  "MMMM d, yyyy",
                                  new CultureInfo("en-US"));
于 2013-08-13T04:18:50.347 に答える
2

次のようなものを使用して見てください

DateTime.TryParseExact メソッド (文字列、文字列[]、IFormatProvider、DateTimeStyles、DateTime)

指定された形式の配列、カルチャ固有の形式情報、およびスタイルを使用して、指定された日付と時刻の文字列表現を等価の DateTime に変換します。文字列表現の形式は、指定された形式の少なくとも 1 つと正確に一致する必要があります。このメソッドは、変換が成功したかどうかを示す値を返します。

何かのようなもの

string AlaaJoseph = "October 23, 1996";
DateTime AlaaJosephDateTime;
if (DateTime.TryParseExact(AlaaJoseph, "MMMM dd, yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out AlaaJosephDateTime))
    Console.WriteLine("DateTimeTryParseExact Passed");

string JennetteMcCurdy = "June 26, 1992";
DateTime JennetteMcCurdyDateTime;
if (DateTime.TryParseExact(JennetteMcCurdy, "MMMM dd, yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out JennetteMcCurdyDateTime))
    Console.WriteLine("DateTimeTryParseExact Passed");

また、知っておくべきもう 1 つの良い点は、カスタムの日付と時刻の書式文字列です。

于 2013-08-13T04:17:45.447 に答える
0

ここでのパフォーマンスは非常に重要です

i パフォーマンスは二次的な重要性だと思います。すべてのシナリオでプログラムが適切に機能することが何よりも重要です。1 つのシナリオでは高速で、9 つのシナリオで失敗する場合は、高速なプログラムを使用しても意味がありません。最初にすべてのシナリオでプログラムが機能するようにしてから、最適化されているかどうかを検討する必要があります。文字列を解析する独自のパーサーを作成したとしても、どの段階でもすべての例外処理を行う必要があります。

したがって、車輪を再発明する代わりに、あらゆる種類の例外処理を処理する必要がないようにし、フレームワークにそれを任せます。使用する必要があります

DateTime.TryParseExact

また、string[] 形式を取るオーバーロードもあり、ユーザーが与えると予想されるすべての形式を指定できます。

string[] formats= {"MMMM dd, yyyy","MMM dd, yyyy","M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", 
               "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", 
               "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", 
               "M/d/yyyy h:mm", "M/d/yyyy h:mm", 
               "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm"};

DateTime resultantDate;
string AlaaJoseph = "October 23, 1996";
if (DateTime.TryParseExact(AlaaJoseph, formats, 
                          new CultureInfo("en-US"), 
                          DateTimeStyles.None, 
                          out resultantDate))
{
     //your rest of code
}
于 2013-08-13T04:43:42.597 に答える