以下是我用来检查Cookie到期时间和当前时间之间的时差的代码。
HttpCookie mycookie = Request.Cookies.Get("hello");
if (mycookie == null)
{
mycookie = new HttpCookie("hello");
mycookie.Value = "Hello World";
mycookie.Expires = DateTime.Now.AddMinutes(20);
Response.Cookies.Add(mycookie);
DateTime now = DateTime.Now;
Response.Write("Cookie Not found <br> Time diff : ");
Response.Write((mycookie.Expires - now).TotalMinutes);
}
else
{
DateTime now = DateTime.Now;
Response.Write("Cookie found <br> Time diff : ");
Response.Write((mycookie.Expires - now).TotalMinutes);
}
如您所见,我正在检查cookie是否存在。如果不存在,那么我创建一个cookie并打印时差,这工作正常并按预期打印20
(当我第一次运行时)。如果cookie存在,我打印时间差而不创建cookie,这是行不通的(当我第二次运行它或页面刷新时),这会打印一些负的长号。
答案 0 :(得分:2)
您可以直接从另一个时间减去一次。 .TotalMinutes
会在几分钟内给你差异。所以你可以像这样使用:
DateTime end = cookie.Expires;
DateTime start = DateTime.Now;
Response.Write((end-start).TotalMinutes);
答案 1 :(得分:0)
编辑: Expired属性仅供浏览器使用,以了解何时删除cookie。它不会被发送回服务器,因此您无法读取它。如果要实现此目的,则应将时间戳存储在cookie值中,并在发送回来时对其进行解析。请参阅此处有关过期的说明 - https://msdn.microsoft.com/en-us/library/ms178194.aspx
虽然您没有指定实际问题是什么,但我假设问题结果不正确。很可能时区存在问题。根据文档(https://msdn.microsoft.com/en-us/library/system.net.cookie.expires(v=vs.110).aspx)
所以你需要这样的东西
DateTime end = cookie.Expires;
//needed because ToUniversalTime method assumes Unspecified kind means Local
//while Expires assumes Unspecified means Utc
if(end.Kind == DateTimeKind.Unspecified)
{
end = DateTime.SpecifyKind(end, DateTimeKind.Utc);
}
end = end.ToUniversalTime();
DateTime start = DateTime.UtcNow;
Response.Write((end - start).TotalMinutes);
答案 2 :(得分:0)
看看这段代码,这将提供你需要的东西
python run_tests.py
您的代码中存在两个错误。
您无法从浏览器中读取到期日期,因此您必须将其作为属性添加到Cookie中,然后才能阅读它(请查看HttpCookie mycookie = Request.Cookies.Get("hello");
if (mycookie == null)
{
mycookie = new HttpCookie("hello");
mycookie["message"] = "Hello World";
mycookie["ExpirationDate"] = DateTime.Now.AddMinutes(20).ToString();
mycookie.Expires = DateTime.Now.AddMinutes(20);
Response.Cookies.Add(mycookie);
DateTime now = DateTime.Now;
Response.Write("Cookie Not found <br> Time diff : ");
Response.Write((mycookie.Expires - now).TotalMinutes);
}
else
{
DateTime end = Convert.ToDateTime(mycookie["ExpirationDate"]);
DateTime now = DateTime.Now;
Response.Write("Cookie found <br> Time diff : ");
Response.Write((end-now).Minutes);
}
部分)。
您正试图获得else
(大数字的原因)。问题是,当你得到当前时间((end-now).TotalMinutes
)时,它也会给出秒和毫秒。因此,当您尝试减去时,您将无法在几分钟内获得整数。因此请使用DateTime.Now
。
要了解更多信息,请尝试使用此代码。
(end-now).Minutes