Как преобразовать 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, как я могу получить время?
Ответы
Ответ 1
dateDate.Ticks
должен предоставить вам то, что вы ищете.
Значение этого свойства представляет число 100-наносекундных интервалов которые прошли с 12:00:00 полночь, 1 января 0001 года, которая представляет DateTime.MinValue. Оно делает не включать количество тиков, которые относятся к прыжковым секундам.
DateTime.Ticks
Если вы действительно ищете время эпохи Linux (секунды с 1 января 1970 года), принятый ответ для этого вопроса должен быть уместным.
Но если вы на самом деле пытаетесь "сжать" строковое представление даты в int, вы должны спросить себя, почему бы вам просто не сохранить его как строку для начала. Если вы все еще хотите сделать это, ответ Stecya будет правильным. Имейте в виду, что он не будет вписываться в int, вам придется использовать длинный.
Ответ 2
long n = long.Parse(date.ToString("yyyyMMddHHmmss"));
см. Пользовательские строки формата даты и времени
Ответ 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.