3

私のコードは次のエラーを出します:入力文字列が正しい形式ではありませんでした。

このヒントで:

文字列をDateTimeに変換するときは、各変数をDateTimeオブジェクトに入れる前に、文字列を解析して日付を取得します

以下は私のコードです:( 問題のあるコードのみを表示するように編集されています)

 string username ="aits";
 string password = "12345";
 Int32 intresortid=7;
 string strPartySurname = "Kumar"; ;
 string strPartyFirstName = "Test";
 string strPartyPrefix = "Mr & Mrs";
 Int16 intQtyAdults=1;
 Int16 intQtyTotal=1;
 string PromotionCode = "TIF";
 string flightNO = "FlighDJ76";
 string strNotes = "<nl>Provide Breakfast<nl>Honeymooners";

 try
    {

        string url = string.Format("http://localhost/insHold.asp?username={0}&password={1‌​}&intresortid={2}&strPartySurname={3}&strPartyFirstName={4}&strPartyPrefix={5}&intQtyAdults={6}&intQtyTotal={7}&dtmLine1={8:yyyy-MM-dd}&strRoomType1={9}&intRooms1={10}&intnights1={11}&strFlightNo={12}&strNotes={13}&strBookingCode={14}&strPromotionCode={15}", username, password, intresortid, strPartySurname, strPartyFirstName, strPartyPrefix, intQtyAdults, intQtyTotal, CheckInDate, BBRoom, RoomQty, NoofNights, flightNO, strNotes, ResBookingID, PromotionCode);                                                                                                                                                                                                                                                        
        WebRequest request = HttpWebRequest.Create(url);
        WebResponse response = request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string urlText = reader.ReadToEnd();
        bookid = Convert.ToInt16(urlText);
    }
    catch (System.ApplicationException ex)
    {
        throw ex;
    }

DateTime値としてこれを修正する方法がわかりません。CheckInDateはすでにdate型です。

誰かがこれを修正する方法を教えてください、または私を正しい方向に向けてください。

4

6 に答える 6

3

このようにしてみてください

DateTime ckDate = new DateTime(2012, 09, 24);

詳細については、http://www.dotnetperls.com/datetimeをご覧ください。

文字列をdatetomeに変換することもできますが、文字列が日付であることを事前に確認する必要があります

 DateTime ckDate =Convert.DateTime(yourinputstring);

解析も使用できます

DateTime ckDate=DateTime.Parse(yourinputstring);
于 2012-09-14T03:40:48.753 に答える
3

フォーマット文字列には15個のフォーマット指定子がありますが、パラメーターは14個だけです。見逃していない限り、フォーマット文字列は無効です。

/*
username={0}& ->username, 
password={1‌​}& -> password, 
intResortID={2}& -> intresortid, 
strpartysurname={3}& -> strPartySurname, 
strpartyfirstname={4}& ->strPartyFirstName, 
strpartyprefix={5}& -> intQuantityTotal, 
intQuantityTotal={6}& -> ckDate, 
dtmLine1={7}& -> BBRoom, 
strRoomType1={8}& -> RoomQty, 
intRooms1={9}& -> NoofNights, 
intnights1={10}& -> flightNO, 
strFlightNo&{11}& -> strNotes, 
strNotes{12}& -> ResBookingID, 
strBookingCode{13}& -> PromotionCode
strPromotionCode={14}", -> ????? Missing ????
);                                    
*/

日付に関する限り、日付が含まれている場合、またはであるckDate場合、どのように取得したかは示されていません。また、パラメータリストから、「」と呼ばれるものにマップされているように見えます。stringDateTimeckDateintQuantityTotal

ckDateが文字列の場合は、DateTime.TryPraseメソッドを使用して実際のDateTimeに変換します。

文字列から変換する場合は、入力日が " inputDate"という文字列変数にあると仮定して、これに従ってください。

DateTime checkInDate;
if (!DateTime.TryParse(inputDate, out checkInDate))
{
 //This is error condition, which means your string date wasn't convertible to DateTime
}
else
{
   // Variable checkInDate now contains converted DateTime.
   // You can put your format string here and your DateTime should work fine.
}
于 2012-09-18T05:15:01.923 に答える
2

使ってみてくださいDateTime.ParseExact Method

DateTime result = DateTime.ParseExact("2012-09-24", "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
于 2012-09-14T03:40:58.363 に答える
1

文字列を日付に変換する手間をかけずに、可能な場合はDateTimesコンストラクターを使用することをお勧めします。

DateTime t = new DateTime(2012, 9, 24);

それでも文字列から開始する場合は、DateTime.Parseのバリエーションを使用する必要があります

最も簡単なことはうまくいくでしょう:

DateTime t = DateTime.Parse("2012-9-24");

使用日の形式を明示的に指定するためDateTime.ParseExact

日付文字列はユーザ​​ーが入力するとおっしゃっていたので、ユーザーが不正な形式の日付を入力した場合に備えて、フィードバックループが必要だと思います。この場合、DateTime.TryParseを使用する必要があります

于 2012-09-14T03:41:27.900 に答える
0

フォーマット文字列を書き直すだけで問題は解決します。{}中括弧を書き直すと解決することがわかりました。ぜひお試しください。

于 2012-09-18T04:54:20.783 に答える
0

loopedcodeの答えはおそらく正しいです:strpartyprefixフォーマット指定子のパラメーターがありません。

さらに、でckDate期待される形式に明示的にフォーマットする必要がありますholdbooking.asp。これはおそらく、カルチャ不変の形式である必要があります。

たとえば、holdbooking.asp「yyyy-MM-dd」を期待している場合は、

String.Format(" ...&dtmLine1={7}&...", ...,ckDate,...);

に:

String.Format(CultureInfo.InvariantCulture, 
              " ...&dtmLine1={7:yyyy-MM-dd}&...", ...,ckDate,...);
于 2012-09-18T09:45:16.520 に答える