Как конвертировать год, месяц и день в тики без использования DateTime - PullRequest
0 голосов
/ 31 января 2012
long ticks = new DateTime(2012, 1, 31).ToLocalTime().Ticks; // 634635684000000000

Но как это сделать без DateTime конструктор ?

edit То, что я на самом деле хочу, это сохранить только годы, месяцы и дни от отметок.

long ALL_Ticks = DateTime.Now.Ticks; // 634636033446495283
long Only_YearMonthDay = 634635684000000000; // how to do this ?

Я хочу использовать это в запросе linq-sql с использованием Linq.Translations.

Ответы [ 5 ]

3 голосов
/ 31 января 2012

Если вы хотите использовать тики только для той части текущей даты и времени, которую вы можете использовать:

    long Only_YearMonthDay = DateTime.Now.Date.Ticks; //634635648000000000
    //DateTime.Now.Date.Ticks + DateTime.Now.TimeOfDay.Ticks == DateTime.Now.Ticks
2 голосов
/ 31 января 2012

Вы можете узнать, сколько дней в расчете, а затем умножить на 864 000 000 000 (то есть, сколько тиков в день). Это то, что вы ищете? Бит документации здесь: http://msdn.microsoft.com/en-us/library/system.timespan.ticksperday.aspx.

Счастливого кодирования,
Cheers,
Крис.

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

Если я вас правильно понимаю, вы не беспокоитесь о тиках до определенного времени суток ?! Таким образом, это будет что-то вроде:

var ticksToDate = (DateTime.UtcNow - DateTime.MinValue).Days * 864000000000;

Это отвечает на ваш вопрос ??

0 голосов
/ 31 января 2012

Я понимаю, что вы не хотите часовых частей даты.Если вы используете Date, то вы получите только день (например, 01.01.2012 00:00:00)

long ticks = new DateTime(2012, 1, 31).Date.Ticks;

И с любым уже созданным объектом DateTime, конечно, тоже самое.

long ticks = dateObject.Date.Ticks;
0 голосов
/ 31 января 2012

В вашем посте уже есть ответ:

long ALL_Ticks = DateTime.Now.Ticks; 
// that's the ticks (from DateTime.MinValue) until 'now' (this very moment)

long ticks = new DateTime(2012, 1, 31).ToLocalTime().Ticks;
// or
long ticks = DateTime.Now.Date.Ticks;
// that's the ticks until the beginning of today

long yearmonthticks = new DateTime(2012, 1, 1).ToLocalTime().Ticks;
// that's the ticks until the beginning of the month

// etc..., the rest is simple subtractions

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

0 голосов
/ 31 января 2012

Это будет довольно сложно, если у вас нет другого способа получить текущую дату и время.Согласно MSDN :

Один тик представляет сто наносекунд или одну десятую миллионную секунды.В миллисекунде есть 10 000 тиков.

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

Теперь, если вы знаете текущую дату и время, вы можете рассчитать, сколько дней прошло с January 1, 0001, и использовать эторассчитать количество тиков.

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