日期时间转换和解析



我的代码给出了以下错误:输入字符串的格式不正确

提示:

将字符串转换为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,...);

相关内容

  • 没有找到相关文章

最新更新