Подтвердить что ты не робот

Как преобразовать DateTime в int?

У меня есть следующий DateTime 25.04.2011 17:12:13 и попробовал это преобразовать его в int

 int result = dateDate.Year * 10000 + dateDate.Month * 100 
             + dateDate.Day + dateDate.Hour + dateDate.Minute + dateDate.Second;

Но все еще получается 2011425, как я могу получить время?

4b9b3361

Ответ 1

dateDate.Ticks

должен предоставить вам то, что вы ищете.

Значение этого свойства представляет число 100-наносекундных интервалов которые прошли с 12:00:00 полночь, 1 января 0001 года, которая представляет DateTime.MinValue. Оно делает не включать количество тиков, которые относятся к прыжковым секундам.

DateTime.Ticks


Если вы действительно ищете время эпохи Linux (секунды с 1 января 1970 года), принятый ответ для этого вопроса должен быть уместным.


Но если вы на самом деле пытаетесь "сжать" строковое представление даты в int, вы должны спросить себя, почему бы вам просто не сохранить его как строку для начала. Если вы все еще хотите сделать это, ответ Stecya будет правильным. Имейте в виду, что он не будет вписываться в int, вам придется использовать длинный.

Ответ 3

Я думаю, что вы хотите (это не будет соответствовать int, но вам нужно сохранить его как long):

long result = dateDate.Year * 10000000000 + dateDate.Month * 100000000 + dateDate.Day * 1000000 + dateDate.Hour * 10000 + dateDate.Minute * 100 + dateDate.Second;

В качестве альтернативы, сохранение тиков является лучшей идеей.

Ответ 4

Вы хотите, чтобы "int" выглядел как 20110425171213? В этом случае вам будет лучше использовать ToString с соответствующим форматом (что-то вроде "yyyyMMddHHmmss" ), а затем лить строку в целое число (или длинный, без знака int, как это будет более 32 бит).

Если вы хотите фактическое числовое значение (количество секунд с года 0), то это совсем другой расчет, например.

result = second
result += minute * 60
result += hour * 60 * 60
result += day * 60 * 60 * 24 

и т.д..

Но вам лучше использовать Ticks.