Конвертировать 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;
Ответ 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
Ответ 5
См. предложение по теме ниже:
Как преобразовать тики в минуты?
TimeSpan.FromTicks(DateTime.Now.Ticks).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.