我的代码给出了以下错误:输入字符串的格式不正确
提示:
将字符串转换为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已经是日期类型。
有人能告诉我如何解决这个问题吗?或者给我指明正确的方向。
试着像一样这样做
DateTime ckDate = new DateTime(2012, 09, 24);
可以在这里找到更多http://www.dotnetperls.com/datetime
您也可以将字符串转换为datetome,但您必须提前检查字符串是否为日期
DateTime ckDate =Convert.DateTime(yourinputstring);
您也可以使用解析
DateTime ckDate=DateTime.Parse(yourinputstring);
您的格式字符串中有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
方法将其转换为实际的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.
}
尝试使用DateTime.ParseExact Method
DateTime result = DateTime.ParseExact("2012-09-24", "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
我建议您尽可能使用DateTimes构造函数,不要麻烦将字符串转换为日期。
DateTime t = new DateTime(2012, 9, 24);
如果你仍然想从字符串开始,你需要使用DateTime的变体
最简单的方法是:
DateTime t = DateTime.Parse("2012-9-24");
为了明确指定日期的格式,请使用DateTime.ParseExact
由于您提到日期字符串是由用户输入的,我认为您需要一个反馈循环,以防用户输入的日期格式不正确。在这种情况下,您应该使用DateTime.TryParse
我只是重写了格式字符串,它就解决了这个问题。发现重写{}大括号解决了此问题。请尝试。
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,...);