Дата и время для часовых поясов - PullRequest
2 голосов
/ 26 августа 2011

In C #

DateTime.Now.Day Vs. DateTime.Now.Date.Day => Какая разница?

Например, когда я нахожусь в зоне PST, скажем, 8 вечера - 08/26, когда я звоню

DateTime.Now.Day //26
DateTime.Now.Date.Day //26

Например, когда я в зоне EST, скажем, 8 вечера - 08/26, когда я звоню

DateTime.Now.Day //27
DateTime.Now.Date.Day //27

Я пытаюсь получить Day от datetime или date, чтобы я хотел использовать день, который может быть согласованным в любых часовых поясах PST / EST / CST, какие-либо мысли?

Ответы [ 2 ]

3 голосов
/ 27 августа 2011

Краткий ответ: используйте DateTime.UtcNow .

Длинный ответ:

Разбейте его в терминах выражений и системы типов:

DateTime - это тип значения с несколькими статическими элементами. Один из этих членов Now. Свойство static Now возвращает экземпляр структуры DateTime, заполненный значением текущего времени. Но это все еще экземпляр типа DateTime.

Элемент Date доступен для экземпляров типа DateTime и возвращает новый экземпляр DateTime со значениями для нулевого компонента времени. Но это все еще просто экземпляр типа DateTime.

Элемент Day доступен для экземпляров типа DateTime и возвращает целое число для текущего дня месяца.

Прежде всего, вы хотите узнать, есть ли разница между DateTime.Now.Date.Day и DateTime.Now.Day. Логично, что вы думаете, что их нет, но я хочу отметить одну вещь в свойстве Now: это не волшебство. Код запускается, и, соответственно, проходит время после обращения к свойству Now и выполнения выражения .Date.Day. В течение этого времени исходное значение Now становится устаревшим. Это выражение очень быстрое и вряд ли займет какое-то время & mdash; но это не ноль. Если вы не будете осторожны, вы можете создать условия гонки.

Во-вторых, вы хотите знать о часовых поясах и получении согласованных дат. Хитрость здесь в том, действительно ли вы заботитесь только о перечисленных часовых поясах США и будете ли вы около полуночи в любой зоне. Но на самом деле лучший вариант - взглянуть на другого члена типа данных DateTime: это свойство .UtcNow. Это вернет одно и то же значение независимо от того, в каком часовом поясе вы находитесь. Вы можете использовать его для оценки времени, которое будет согласовано во всех ваших часовых поясах.

3 голосов
/ 26 августа 2011

Разницы нет абсолютно (см. Документацию DateTime Structure).Идентификатор .Date просто удаляет информацию о времени из объекта DateTime, с которым вы работаете.

Если вы хотите согласованное время, используйте время UTC и DateTime.UtcNowсвойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...