2015-01-23 4 views
-5

Например, как найти разницу во времени между (01/23/2015 10:10 и 01/24/2015 06:00) или между (01/23/2015 10:10 pm и 24/01/2016 06:00), или между (24.01.2012 05:10 и 01/24/2015 06:00).Как найти разницу между двумя временными интервалами

Основная цель: У меня есть запланированный метод задачи, который выполняется точно в 6:00 утра, и запланированная задача записывается в global.aspx. Я хочу найти правильную разницу во времени между временем начала приложения и 6:00 утра. Основываясь на этой разнице во времени, я могу сохранить поток до сна до этого времени, а затем запустить метод.

Из предложенных решений, если мы вычитаем выше от более низкого значения (10-6), он дает положительный результат. но если нижнее вычитается из более высокого значения (6-10), это дает мне отрицательный результат. который я не могу использовать в качестве значения, которое должно быть предоставлено в данном конкретном случае: System.Threading.Thread.Sleep (TimeSpan.FromHours (результат)).

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

+0

У вас есть ваши значения времени, уже сохраненные в объекте 'DateTime'? Если нет, не так ли? Пожалуйста, укажите, что вы пытаетесь сделать. См. Http://stackoverflow.com/help/how-to-ask –

+0

@Esoteric Noted. Я интерпретировал этот вопрос по-разному. Это ужасно запутанно. И все, кто ответил до сих пор, похоже, интерпретировали его так же. – rikitikitik

+0

@rikitikitik Согласен. Надеюсь, изменения изменили его. –

ответ

0

DateTime дает метод сравнения, который может использоваться. DateTime.Compare (d1, d2) возвращает целое число. Если возвращаемое значение меньше 0, тогда d1 < d2, d1 = d2, если возвращаемое значение равно 0 и d1> d2, если возвращаемое значение> 0.

+0

Это не похоже, что это скажет вам _difference_ между двумя значениями времени. Только тот, который больше другого (если он есть). –

+0

Этот вопрос касается разницы между двумя временными частями, а не двумя датами. –

0

Если у вас есть DateTime и/или Timespan, вы должны иметь возможность использовать оператора вычитания.

  • Разность 2 DateTime значений является Timespan:

    DateTime dt1 = GetSomeValue() ; 
    DateTime dt2 = GetAnotherValue() ; 
    Timespan delta = dt1 - dt2 ; 
    
  • Отличие DateTime и Timespan является DateTime:

    DateTime dt = GetSomeValue() ; 
    Timespan ts = GetAnotherValue() ; 
    DateTime delta = dt - ts ; 
    
  • разность двух Timespan Экземпляры: Timespan:

    Timespan ts1 = GetSomeValue() ; 
    Timespan ts2 = GetAnotherValue() ; 
    Timespan delta = ts1 - ts2 ; 
    

Любой комбо недействителен.

0

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

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

string startTimeText = "01/23/2015 10:10 am", endTimeText = "01/24/2015 06:00 am"; 
DateTime startTime, endTime; 

startTime = DateTime.Parse(startTimeText, null, DateTimeStyles.AssumeUniversal); 
endTime = DateTime.Parse(endTimeText, null, DateTimeStyles.AssumeUniversal); 

TimeSpan timeDifference = endTime - startTime; 

Несколько примечаний:

  • Я передал AssumeUniversal методу Parse(). Вы должны быть очень осторожны в выполнении таких вычислений. Желательно, чтобы все ваши времена были в UTC уже или могут быть преобразованы, прежде чем вам придется делать расчет. В противном случае, если часовой пояс - это тот, который использует переход на летнее время (т.большинство часовых поясов в мире), вы можете получить ошибки при работе со временем, которое охватывает переключение с или на летнее время.
  • Оператор - перегружен для DateTime, что позволяет вам написать выражение, чтобы рассчитать разницу в более читаемом виде. Подобные перегрузки операторов существуют для других общих вычислений даты/времени.
+0

Этот вопрос касается разницы между двумя временными частями, а не двумя датами. –

+0

OP писал «временные интервалы», но из его примерных данных, который включает в себя фактические _dates_, он, очевидно, означает некоторые определенные моменты времени, то есть «DateTime». –

+0

@peter Спасибо за ваше понимание. Ваше решение хорошее, но оно не будет работать для всех трех упомянутых сценариев. Пожалуйста, еще раз проверьте мое требование и помогите мне в этом и дайте мне знать, если у вас есть какие-либо вопросы. –

Смежные вопросы