1

適切でない形式の例外をスローして、文字列を日付に変換できません。

ここにパターンがあります:

    DD-MM-YYYY
    MM-DD-YYYY
    YYYY-DD-MM
    YYYY-MM-DD
    YYYYDDMM
    YYYYMMDD

フォーマットはドロップダウンリストから来ています。これは私が別の方法を試したものですが、それでも例外がスローされます:

 strCurrentFormat = rcboDateFormat.SelectedValue.ToString();

                 DateTime db = DateTime.ParseExact(strOldDate, "DD-MM-YYYY", CultureInfo.InvariantCulture);

                 //DateTime loadedDate = DateTime.ParseExact(strOldDate, strCurrentFormat, null);

以前に文字列を取得して分割し、年月日を適切な形式に移動することでこの問題を解決しましたが、それには長い時間がかかります。

4

3 に答える 3

5

2つのこと:

まず、正しいフォーマット文字列を使用してください。DおよびYは既知の形式指定子ではありません。dそしてyです。

2 つ目 - フォーマットを文字列配列に入れ、そのフォーマットのリストを取得するParseExactオーバーロードを使用できます。

string[] formats = new string[] 
   {"dd-MM-yyyy",
    "MM-dd-yyyy",
    "yyyy-dd-MM",
    "yyyy-MM-dd",
    "yyyyddMM",
    "yyyyMMdd"};

DateTime db = DateTime.ParseExact(strOldDate, 
                                  formats, 
                                  CultureInfo.InvariantCulture,
                                  DateTimeStyles.None);

フォーマットは順番に試行されます。

于 2012-06-26T19:21:57.567 に答える
1

フォーマット文字列が間違っています。

「d」と「y」には小文字が必要なので、

dd-MM-yyyy

MSDNの書式文字列についてすべて読んでください。

于 2012-06-26T19:22:15.893 に答える
1

http://www.codeproject.com/Articles/14743/Easy-String-to-DateTime-DateTime-to-String-and-Forから取得

d - 先頭にゼロを付けない数字の日。dd - 先頭に 0 を付けた数値の日。ddd - 曜日の略称。dddd - 曜日の完全な名前。

f,ff,fff,ffff,fffff,ffffff,fffffff - 秒の端数。F が多いほど、精度が高くなります。

h - 12 時間時計、先行ゼロなし。hh - 先行ゼロ付きの 12 時間時計。H - 24 時間制、先行ゼロなし。HH - 先行ゼロ付きの 24 時間時計。

m - 先行ゼロなしの分。mm - 先行ゼロ付きの分。

M - 先行ゼロのない数値の月。MM - 先行ゼロ付きの数値の月。MMM - 月の略称。MMMM - 完全な月の名前。

s - 先行ゼロなしの秒。ss - 先行ゼロ付きの秒。

t - AM/PM ですが、最初の文字のみです。tt - 午前/午後 (午前/午後)

y - 世紀と先行ゼロのない年。yy - 世紀を除いた年、先行ゼロ付き。yyyy - 年と世紀。

zz - +/- で設定されたタイム ゾーン オフセット。

于 2012-06-26T19:21:08.823 に答える