2010-11-05 3 views
12

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

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, если я кодирую на C#, если я собираюсь рассчитать все секунды с 0 AD?

+2

Извините, если я новичок, но почему вы сравниваете секунды вместо встроенных инструментов расчета даты? – Marko

+0

Я пытаюсь вычесть переменную, которая является целым числом, заданным в секундах от одного из двух объектов, отмеченных выше. – AndHeCodedIt

ответ

24

Тип DateTime поддерживает comparison operators:

if (dateTimeA > dateTimeB) 
{ 
    ... 

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

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

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

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

+1 здесь, я использовал этот. Спасибо за быстрый ответ. – AndHeCodedIt

5

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

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

Внимание: вы хотите TimeSpan.TotalSeconds, а не TimeSpan.Seconds – dtb

+0

Пожалуйста, используйте TotalSeconds, а не секунды. Секунды представляют оставшуюся часть секунд, когда вы учитываете дни, часы, минуты и т. Д. – rein

+0

Thanks; исправлено. Если было замешано и подумал, что «общие» функции вернули количество целых единиц, в отличие от всех фракций этих единиц. – GendoIkari

4

Если вы хотите сравнить 2 объект DateTime, почему бы вам не использовать предоставленные операторы? http://msdn.microsoft.com/en-us/library/aa326723%28v=VS.71%29.aspx

DateTime a, b; 
if (a > b) //a is after b 
+0

будет работать, если (a.AddSeconds> b)? Причина, о которой я прошу, заключается в том, что у меня есть буферное время, которое я должен был бы вычесть из одного из двух объектов. Время буфера в секундах. – AndHeCodedIt

+2

Да, вы могли бы это сделать: если DateTime.Now.AddSeconds (10)> otherDateTime – rein

+0

+1 Это реализация, которую я собираюсь использовать. – AndHeCodedIt

3

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

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

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

+2

Один улов, чтобы использовать ts.TotalSeconds, который преобразует TimeSpan в секунды вместо ts.Seconds, который является только компонентом секунд. –

6

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

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

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

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

 DateTime.Now.Ticks/TimeSpan.TicksPerSecond 
2

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

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

Обратите внимание, что tsElapsed.TotalSeconds является двойной, а не Int.