0

我正在开发一个应用程序,其中我在inquiry.aspx页面上传递一个 URL,该 URL 将向用户的电子邮件地址发送一条消息。

该网址如下所示:

mail.Body += string.Format("<a href=\"http://www.abc.co.in/Download.aspx?period="
                   + DateTime.Now.ToString("dd-MM-yyyy hh mm")
                   + "&ProductName=" + productName + "\">Demo Download</a>");

现在我将它检索到页面的页面加载事件download.aspx。我的代码是:

string PName = Request.QueryString["ProductName"] as string;
string myDate = Request.QueryString["period"] as string;

DateTime dt1 = Convert.ToDateTime(myDate);
DateTime dt2 = DateTime.Now;
int day1, day2;
day1 = dt1.Day;
day2 = dt2.Day;
TimeSpan variable = dt2 - dt1;
if (day1!=day2)
{
    //Response.Write("Download time is expired now");
    lblmsg.Visible = true;
    lblmsg.Text = "Download time is expired now";
}
else
{
    lblmsg.Visible = true;
    lblmsg.Text = "U can Still Download";
}

我收到错误:

字符串未被识别为有效的 DateTime

用户从他的电子邮件 ID 中单击该链接后,我的输出 URL 如下所示:

http://www.abc.co.in/Download.aspx?period=11-04-2013%2006%2036&ProductName=Otja

这里的日期时间用于条件,即在同一天之后意味着今天将邮件发送给用户,并且今天只有他可以下载。明天以后,它会显示您现在无法下载软件的消息。这就是在 URL 上传递日期时间的原因,但我遇到了错误。请有人帮助我,这是非常需要的。

4

2 回答 2

0

由于您DateTime.ToString("dd-MM-yyyy hh mm")在创建 URL 时使用,因此在解析时应使用相同的格式字符串:

DateTime dt1 = DateTime.ParseExact(myDate, "dd-MM-yyyy hh mm", System.Globalization.CultureInfo.InvariantCulture);

最佳实践要求您在创建 URL 时也传递文化: DateTime.ToString("dd-MM-yyyy hh mm", CultureInfo.InvariantCulture).

顺便说一句,您不应该在代码示例中传递 URL 中的日期。相反,您会将日期与令牌一起存储在数据库中,然后传递该令牌。或者,您可以加密日期。问题是收件人能够更改日期,从而覆盖您对下载可用性的检查。

于 2013-04-11T15:03:11.490 回答
0

您可以尝试几件事。

首先将您的日期格式更改为通用日期格式,而不是区域。假设您使用的是 .net Web 应用程序,我已经看到客户端执行与服务器不同的问题。

yyyy-MM-dd 

其次,您的日期时间格式字符串不太正确,即小时和分钟之间缺少冒号。此外,如果您尝试使用上述格式,则必须指定您的 TT 或 24 小时。在说结束时,您的格式如下所示

yyyy-MM-dd hh:mm tt

或者

yyyy-MM-dd HH:mm 

除了上面你可能想使用 date -compare

DateTime dt1 = Convert.ToDateTime(myDate).Date;
DateTime dt2 = DateTime.Now.Date;
if(dt1 != dt2)
{
//...
}
else
{
//...
}
于 2013-04-11T13:33:07.923 回答