2015-03-11 7 views
1

Не должно ли значение DateTime.Now.Ticks быть таким же, как DateTime.UtcNow.Ticks? Я проверил их значения и обнаружил, что разница отражает мое текущее смещение часового пояса от UTC. Что мне здесь не хватает?DateTime.Ticks value value

+2

Почему вы ожидаете, что они будут такими же? Даты/времена разные, поэтому их представления в тиках различны. – Blorgbeard

+1

Почему этот вопрос был проголосован? Пожалуйста, дайте мне знать, как я могу улучшить этот вопрос. – bittusarkar

ответ

5

Это часть того, как объекты были разработаны.

В других библиотеках и языках (например, код JavaScript Date) значение привязано к UTC и обычно использует эпоху 1970-01-01.

Но в .NET, значение Ticks относится к той же системе координат, что Years, Months, Days и другие свойства основаны на. Он использует эпоху 0001-01-01.

В DateTime, есть свойство, называемое Kind:

  • Если вид является DateTimeKind.Utc, то вы знаете, что значение связано с UTC.
  • Если вид DateTimeKind.Local, то вы знаете, что значение связано с местным часовым поясом.
  • Если вид DateTimeKind.Unspecified, то вы понятия не имеете, какой часовой пояс у вас есть. У вас просто есть дата и время.

Вы видите разницу между DateTime.UtcNow.Ticks и DateTime.Now.Ticks как текущей временной зоны смещения, поскольку DateTime.Now имеет Local вид, в то время как DateTime.UtcNow имеет Utc вид. Таким образом, тики DateTime.Now основаны на вашем местном часовом поясе, а тики от DateTime.UtcNow основаны на UTC.

Тип DateTimeOffset может использоваться для противодействия этой проблеме. Ticks по-прежнему относятся к показанным значениям, но Offset может использоваться для постоянной настройки этих тиков обратно в систему координат UTC.

Если вам это не нравится, как многие из них этого не делают, альтернативой является использование типов из библиотеки Noda Time.

Кстати, я более подробно расскажу об этой информации и сравниваю ее с другими языками программирования в своем курсе Pluralsight, Date and Time Fundamentals.

0

Это другое, потому что часовые пояса разные.