Функция для создания 24-часовых отметок времени? C # - PullRequest
1 голос
/ 30 августа 2011

У меня есть база данных, где данные хранятся в записях отметок времени, которые являются ключами.

Мне нужна функция, которая может преобразовывать дату, такую ​​как DateTime.Now, в интервал отметки времени, представляющий, например, сегодня 30 августа 00: 00: 00h до 30 августа 23: 59: 59h.

Как я мог написать эту функцию?

Я хочу сделать что-то вроде

выбрать все из таблицы, где отметка времени находится между a и b (эти значения и b будут представлять начальную и конечную отметки времени для дня).

Я не создал базу данных, я не могу ее изменить, я могу только запросить ее.

Ответы [ 6 ]

0 голосов
/ 30 августа 2011

Я думаю, что вам нужно это TimeSpan .

Вы можете просто вычесть один DateTime из другого, и в результате будет разница во времени.

0 голосов
/ 30 августа 2011

Если у вас есть объем дня, вы можете рассчитать тики в течение дня:

// ----------------------------------------------------------------------
public long GetTicksOfDay( DateTime moment )
{
  return moment.Subtract( moment.Date ).Ticks;
} // GetTicksOfDay
0 голосов
/ 30 августа 2011

Полагаю, вы можете попробовать использовать структуру как TimeInterval:

public struct TimeInterval
{
    private readonly DateTime _startTime;
    private readonly DateTime _endTime;

    public DateTime StartTime { get { return _startTime; } }
    public DateTime EndTime { get { return _endTime; } }

    public TimeInterval(DateTime now)
    {
        _startTime = now.Date;
        _endTime = now.Date.AddDays(1).AddTicks(-1);
    }
}

Вы можете назвать это:

TimeInterval day = new TimeInterval(DateTime.Now); 
0 голосов
/ 30 августа 2011

Это вернет кортеж, представляющий интервал, который вы, вероятно, хотите:

Tuple<DateTime,DateTime> GetDateInterval(DateTime datetime) {
    var start = datetime.Date;
    var end = start.AddDays(1).AddTicks(-1);
    return new Tuple<DateTime, DateTime>(start, end);
}

Использование:

var interval = GetDateInterval(DateTime.Now);
Console.WriteLine(interval.Item1);
Console.WriteLine(interval.Item2);

Выход:

30.08.2011 0:00:00
30.08.2011 23:59:59
0 голосов
/ 30 августа 2011

Трудно сказать, что вы хотите, но вот способ получить интервал:

var start = DateTime.Today;
var end = start.AddDays(1).AddSeconds(-1);

Трудно ответить, как вам следует хранить значения в БД, поскольку вы не предоставили достаточно информации о макете таблицы.

0 голосов
/ 30 августа 2011

Может быть DateTime.Now.TimeOfDay.Ticks - это то, что вы ищете.

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