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 已经是日期类型。

有人可以告诉我如何解决这个问题或指出我正确的方向。

4

6 回答 6

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的,如果它是一个string带有日期的,或者它是一个DateTime. 此外,从参数列表中,看起来像ckDate映射到称为“ intQuantityTotal”的东西。

如果ckDate是字符串,则使用DateTime.TryPrase方法将其转换为实际的日期时间。

如果您要从字符串转换,请按照此操作,假设您的输入日期在一个名为“ 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 回答
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 回答
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 格式说明符的参数。

此外,您应该明确格式化ckDateholdbooking.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 回答