5

誰でも私が間違っていることを見ることができますか?私は日付を解析して有効な日付であることを確認しようとしています.そうであれば、必要な形式に変換します.

これを行うさまざまな方法を試しましたが、すべてが返され01/01/0001 00:00:00ます。

文字列の値parseArrivalDate=02/02/2013

DateTime ukDateFormat;
string ukFormat = "0:ddd, MMM d, yyyy";    
DateTime.TryParseExact(parseArrivalDate, ukFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out ukDateFormat);    
DateTime test = ukDateFormat; 

- - - - - - - - - - - - - - - - - - -編集 - - - - - - -------------------

申し訳ありませんが、うまく説明できませんでした。2013 年 2 月 27 日のように英国の形式を入力すると、英国の形式が dd/MM/yyyy の場合は問題なく動作しましたが、問題は、米国またはその他の形式を入力したときに間違った日付が返されていたため、それが問題だったと考えて、フォーマットのラウンドを変更します。

あなたのコメントを読んだ後、私は最初に正しい英国形式を持っていたので、私の問題は、日付形式を正しく解析できるようにコードを変更するにはどうすればよいかということです。

それがより理にかなっていることを願っていますありがとう

4

6 に答える 6

7

あなたのひも

"0:ddd, MMM d, yyyy"

数値0、コロン:、および に対応する形式があります

"Wed, Mar 27, 2013"

たとえば、カルチャが"en-GB"("English (United Kingdom)") の場合です。String.Formatおそらく、または同様のメソッド呼び出しから来ており、次のようにテキストをフォーマットするためConsole.WriteLineに中括弧に入れられます。{}

Console.WriteLine("The date {0:ddd, MMM d, yyyy} was selected.", someDateTime);

次のようなコードで動作します。

string arrivalDateString = "Wed, Mar 27, 2013";

...

DateTime result;
string yourFormat = "ddd, MMM d, yyyy";    // no "0:" part
bool isOK = DateTime.TryParseExact(arrivalDateString, yourFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out result);    
if (isOK)
{
    // Worked! Answer is in 'result' variable
}
else
{
    // Didn't work! 'result' variable holds midnight 1 January 0001
}

に対応する形式"27/03/2013""dd/MM/yyyy"(または"d/M/yyyy") です。に対応する形式"03/27/2013""MM/dd/yyyy"(または"M/d/yyyy") です。

次のような文字列であるため、1 つのメソッドで両方のスタイルの日付を処理することはできません。

"01/04/2013"   /* ambiguous */

どちらかを意味する可能性があります

  • 2013 年 4 月 1 日
  • 2013 年 1 月 4 日

あいまいで、どの日付が意味されているかを知る方法はありません。ウィキペディア: カレンダーの日付 → 日付形式も参照してください。

于 2013-03-27T14:59:00.573 に答える
1

日付文字列は次のとおりです。02/02/2013使用している形式"0:ddd, MMM d, yyyy"は間違っていMM/dd/yyyyます。月が最初の場合は次のようになります。

DateTime ukDateFormat;
string ukFormat = "MM/dd/yyyy";    
DateTime.TryParseExact(parseArrivalDate, ukFormat,CultureInfo.InvariantCulture,DateTimeStyles.None, out ukDateFormat);    
 DateTime test = ukDateFormat; 

指定した日付に最初に日が含まれ、次に月が含まれる場合は、フォーマットを使用"dd/MM/yyyy"dますM

現在DateTime.MinValue、フォーマットが無効なために解析が失敗しているため、 を取得しています。

于 2013-03-27T12:36:34.467 に答える
1

何を期待しているのかわかりませんが、入力文字列がukFormatパターンを満たしていません! したがって、それは完全に正しい行動です。

パターンを に変更""dd/MM/yyyy""してTryParseExact機能させます。

于 2013-03-27T12:37:16.420 に答える
1

提供された形式は少し奇妙に見えます。これに置き換えてみてください

string ukFormat = "dd/MM/yyyy";    

そして、これに関するドキュメントを読んでください。

于 2013-03-27T12:37:48.193 に答える
0

私がどこで間違っていたのかを理解するのを手伝ってくれてありがとう.

テキスト ボックスの上に、dd/mm/yyyy 形式を使用するように求めるテキストを追加しました。

string getArrivalDate   = ArrivalDate;
                    string getDepartureDate = DepartureDate;

                    string dteFormat        = "dd/MM/yyyy";
                    DateTime result;
                    string arrivalDateParse;
                    string departureDateParse;

                    bool arrival = DateTime.TryParseExact(getArrivalDate, dteFormat, new CultureInfo("en-GB"), DateTimeStyles.None, out result);
                    if (arrival)
                        {
                        arrivalDateParse = getArrivalDate;
                        }
                    else
                        {
                        arrivalDateParse = "notvalid";
                        }

                    bool depart = DateTime.TryParseExact(getDepartureDate, dteFormat, new CultureInfo("en-GB"), DateTimeStyles.None, out result);
                    if (depart)
                        {
                        departureDateParse = getDepartureDate;
                        }
                    else
                        {
                        departureDateParse = "notvalid";
                        }

                    if (arrivalDateParse == "notvalid" || departureDateParse == "notvalid")
                        {
                        if (Request.IsAjaxRequest())
                            {
                            return Json(new { Confirm = "Date not in correct format" }, JsonRequestBehavior.AllowGet);
                            }
                        else
                            {
                            TempData["Error"] = "Sorry your arrival date or departure date is not a valid format, please enter date as dd/mm/yyyy example 02/12/2013";

                            return View("~/Views/Shared/Error.cshtml");
                            }

誰かがコードを改善できる場合は、それをいただければ幸いです。

ありがとう

ジョージ

于 2013-03-28T12:02:29.503 に答える