Краткий ответ: используйте 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
. Это вернет одно и то же значение независимо от того, в каком часовом поясе вы находитесь. Вы можете использовать его для оценки времени, которое будет согласовано во всех ваших часовых поясах.