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

时间:2011-01-31 10:21:24

标签: .net asp.net globalization gmt

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

Cookies are sending 'GMT'时间,但我不知道如果我在GMT + 5中发送DateTime.Now.AddDays(3)会发生什么。与Expires HTTP header (sec 14.21)相同。

我应该使用什么?

2 个答案:

答案 0 :(得分:17)

在这种情况下没关系。

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

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

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

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

表示完全相同的日期时间,即UTC时间下午1点。

只要消费者正确地处理了这种情况(看起来好像已经看过反射器),那么它没有任何区别。

如果你把它作为一个时间字符串传递给它,当然,它可能会有所作为,但在这种情况下不会。

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

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

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

答案 1 :(得分:1)

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

来自MSDN: System.DateTime.UtcNow

  

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

有关它们之间的解释,请参阅this