Должен ли я использовать DateTime.Сейчас или Дата-Время.UtcNow в HttpCookie.Истекает срок действия и HttpCachePolicy.SetExpires?


Должен ли я использовать DateTime.Сейчас или Дата-Время.UtcNow в HttpCookie.Expires и HttpCachePolicy.SetExpires?

Файлы cookie отправляют время " GMT " , но я не знаю, что произойдет, если я отправлю DateTime.Now.AddDays(3), Если я буду в GMT+5. То же самое с заголовком http Expires (sec 14.21).

Что я должен использовать?

2 19

2 ответа:

В данном случае это не имеет значения.

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

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

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

И

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

Представляют собой точно такую же дату и время, а именно 1pm UTC.

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

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

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

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

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

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

Из MSDN: System.значение datetime.UtcNow

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

Обратитесь к этому для объяснения между ними.