Следует ли использовать DateTime.Now или DateTime.UtcNow в HttpCookie.Expires и HttpCachePolicy.SetExpires? - PullRequest
19 голосов
/ 31 января 2011

Должен ли я использовать DateTime.Now или DateTime.UtcNow в HttpCookie.Expires и HttpCachePolicy.SetExpires?

Куки отправляют время 'GMT' , но я не знаю, что произойдет, если я отправлю DateTime.Now.AddDays(3), если я буду в GMT + 5 То же самое с Срок действия HTTP-заголовок (с 14,21) .

Что мне использовать?

Ответы [ 2 ]

17 голосов
/ 31 января 2011

Это не имеет значения в этом случае.

Внутренне, первое, что делает .SetExpires, это конвертирует предоставленное вами время и дату в UTC, прежде чем устанавливать его в cookie.

Имейте в виду, что если ваш потребитель datetime правильно использует класс DateTime, то оба они одинаковы - просто «базовый» для UTC, а другой - нет:

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

и

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

представляет собой точно такое же время, а именно 13:00 UTC.

До тех пор, пока потребитель правильно обращается с этим (как кажется, посмотрев в отражатель), это не имеет значения.

Если вы взяли это и передали в качестве временной строки, то, конечно, это может иметь значение, но не в этом случае.

Эффект можно увидеть с помощью следующего кода (при условии, что вы сами не в UTC - если вы - измените свои настройки для тестирования!). Они оба выводят одно и то же время, как только вы попросили преобразовать его в UTC.

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

public static void WriteDateTime(DateTime dateTime)
{
   Console.WriteLine(dateTime.ToUniversalTime().ToLongTimeString());   
}
1 голос
/ 31 января 2011

Вы должны использовать метод DateTime.UtcNow, потому что это стандарт времени, используемый для файлов cookie.UTC равно Гринвичу.

С MSDN: System.DateTime.UtcNow

Получает объект DateTime, для которого установлены текущие дата и времякомпьютер, выраженный как всемирное координированное время (UTC).

См. this для объяснения между ними.

...