我应该在 HttpCookie.Expires 和 HttpCachePolicy.SetExpires 中使用 DateTime.Now 还是 DateTime.UtcNow?

发布于 2024-10-15 05:31:59 字数 435 浏览 7 评论 0原文

我应该在 HttpCookie.ExpiresHttpCachePolicy.SetExpires 中使用 DateTime.Now 或 DateTime.UtcNow 吗?

Cookie 正在发送“GMT” 时间,但我不知道如果如果我的时间是 GMT+5,我会发送 DateTime.Now.AddDays(3)。与HTTP 标头过期(第 14.21 秒) 相同。

我应该用什么?

Should I use DateTime.Now or DateTime.UtcNow in HttpCookie.Expires and HttpCachePolicy.SetExpires?

Cookies are sending 'GMT' time, but I don't know what happen if I send DateTime.Now.AddDays(3) if I would be in GMT+5. Same with Expires HTTP header (sec 14.21).

What should I use?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灼疼热情 2024-10-22 05:31:59

在这种情况下并不重要。

在内部,.SetExpires 所做的第一件事是将您提供的日期时间转换为 UTC,然后再将其设置到 cookie 上。

请记住,只要您的日期时间使用者正确使用 DateTime 类,那么两者都是相同的 - 只是一个以 UTC 为“基线”,而另一个则不是:

20110701T14:00:00-1:00 (British Summer Time)

20110701T13:00:00+0:00 (UTC)

表示完全相同的日期时间,即下午 1 点世界标准时间。

只要消费者正确处理这个问题(在反光镜中查看后似乎是这样),那么就没有什么区别。

如果您将其作为时间字符串传递,那么当然,它很可能会产生影响,但在本例中并非如此。

您可以使用以下代码查看效果(假设您自己不在 UTC 中 - 如果是 - 更改您的设置进行测试!)。一旦您要求将其转换为 UTC,它们都会输出相同的日期时间。

WriteDateTime(DateTime.Now);
WriteDateTime(DateTime.UtcNow);

public static void WriteDateTime(DateTime dateTime)
{
   Console.WriteLine(dateTime.ToUniversalTime().ToLongTimeString());   
}

It doesn't matter in this case.

Internally, the first thing .SetExpires does is convert your supplied datetime into UTC, before setting it on the cookie.

Bear in mind, as long as your datetime consumer uses the DateTime class correctly, then the two are the same - it is just that one is "baselined" to UTC and the other isn't:

20110701T14:00:00-1:00 (British Summer Time)

and

20110701T13:00:00+0:00 (UTC)

represent exactly the same datetime, namely 1pm UTC.

As long as the consumer handles this correctly (which it seems to, having looked in reflector) then it makes no difference.

If you were taking this and passing it in as a time string, then of course, it may well make a difference, but not in this case.

You can see the effect with the following code (assuming you are not in UTC yourself - if you are - change your settings to test!). They both output the same datetime, once you've asked for it to be converted to UTC.

WriteDateTime(DateTime.Now);
WriteDateTime(DateTime.UtcNow);

public static void WriteDateTime(DateTime dateTime)
{
   Console.WriteLine(dateTime.ToUniversalTime().ToLongTimeString());   
}
西瓜 2024-10-22 05:31:59

您应该使用 DateTime.UtcNow 方法,因为这是 cookie 使用的时间标准。 UTC 相当于 GMT。

来自 MSDN:System.DateTime.UtcNow

获取设置为的 DateTime 对象
当前日期和时间
计算机,表示为协调
世界时间 (UTC)。

请参阅了解它们之间的说明。

You should be using DateTime.UtcNow method because thats the time standard used for cookies. UTC is equivilant to GMT.

From MSDN: System.DateTime.UtcNow

Gets a DateTime object that is set to
the current date and time on this
computer, expressed as the Coordinated
Universal Time (UTC).

Refer to this for an explanation between them.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文