Конвертировать DateTime.Now to Seconds

Я пытаюсь написать функцию, которая преобразует экземпляр DateTime.Now в число секунд, которое он представляет, чтобы я мог сравнить это с другим экземпляром DateTime. Вот что я сейчас имею:

public static int convertDateTimeToSeconds(DateTime dateTimeToConvert)
    {
        int secsInAMin = 60;
        int secsInAnHour = 60 * secsInAMin;
        int secsInADay = 24 * secsInAnHour;
        double secsInAYear = (int)365.25 * secsInADay;

        int totalSeconds = (int)(dateTimeToConvert.Year * secsInAYear) + 
                       (dateTimeToConvert.DayOfYear * secsInADay) +
                       (dateTimeToConvert.Hour * secsInAnHour) +
                       (dateTimeToConvert.Minute * secsInAMin) + 
                       dateTimeToConvert.Second;

        return totalSeconds;
    }

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

Есть ли у кого-нибудь что-нибудь, что могло бы лучше вычислить секунды, данные из объекта DateTime?

Кроме того, должен ли тип возврата быть int64, если я кодирую на С#, если я собираюсь рассчитать все секунды с 0 AD?

Ответ 1

DateTime поддерживает операторы сравнения:

if (dateTimeA > dateTimeB)
{
    ...

Это также работает для DateTime значений, возвращаемых DateTime.AddSeconds:

if (dateTimeA.AddSeconds(42) > dateTimeB)
{
    ...

Если вам действительно нужно количество секунд, прошедших с 01/01/0001 00:00:00, вы можете рассчитать разницу между двумя значениями DateTime. В результате TimeSpan значение TotalSeconds

double result = DateTime.Now.Subtract(DateTime.MinValue).TotalSeconds;

Ответ 2

На самом деле не имеет смысла преобразовывать объект DateTime в секундах. Секунды имеют смысл только в том случае, если вы имеете дело с длительностью (TimeSpan). Если вы хотите сравнить две даты, чтобы получить количество секунд между ними:

TimeSpan diff = DateTime.Now - PreviousDateTime;
double seconds = diff.TotalSeconds;

Ответ 3

Если целью является поиск количества секунд между двумя датами, вам будет намного лучше использовать объект TimeSpan.

TimeSpan span = date2 - date1;
double seconds = span.TotalSeconds;

Ответ 6

Я бы использовал класс TimeSpan, чтобы получить точную разницу между двумя экземплярами DateTime. Вот пример:

  DateTime dt1 = DateTime.Now;
  DateTime dt2 = new DateTime(2003,4,15);
  TimeSpan ts = dt1.Subtract(dt2);

Как только значение TimeSpan (ts, в фрагменте кода выше) доступно, вы можете проверить его значения, чтобы правильно преобразовать TimeSpan в заданное количество секунд.

Ответ 7

Предполагая, что вам действительно нужно получить секунды для объекта datetime, вы можете напрямую получить от него свойство "Ticks". Это не в секундах, но вы можете легко делить на соответствующий фактор, чтобы преобразовать Ticks в секунды. См.: http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx

Итак, что-то вроде:

        DateTime.Now.Ticks/TimeSpan.TicksPerSecond

Ответ 8

Использование TimeSpan для получения истекшего времени между двумя DateTimes, вероятно, является лучшим способом, но если вы действительно хотите получить количество секунд для данного DateTime, вы можете сделать что-то вроде следующего

DateTime dateTimeToConvert = DateTime.Now;
TimeSpan tsElapsed = dateTimeToConvert - DateTime.MinValue;
return tsElapsed.TotalSeconds;

Обратите внимание, что tsElapsed.TotalSeconds - это Double, а не Int.