Сравнить время C#, больше | меньше в формате XX:XX:XX

Solist

Client
Регистрация
02.05.2021
Сообщения
21
Благодарностей
1
Баллы
3
Приветствую!

81981

Надо сравнить длительность видео с переменной из входных настроек, без понятия как это сделать.
Что бы видео было не больше/меньше заданной длины.
В C# начинающий. Буду рад, если хоть направление куда копать подскажите.
 
Последнее редактирование:

dihard

Client
Регистрация
08.11.2019
Сообщения
241
Благодарностей
40
Баллы
28
Тебе надо спарсить тайминг , а потом сравнить их, как-то так.
C#:
var dateOne = DateTime.ParseExact(project.Variables["dateOne"].Value, "HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
var dateTwo = DateTime.ParseExact(project.Variables["dateTwo"].Value, "HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);

TimeSpan diff = dateTwo - dateOne;
return diff.TotalHours;
За надежность не ручаюсь, лежит в загашнике давно, не проверял)
 
  • Спасибо
Реакции: Solist

Solist

Client
Регистрация
02.05.2021
Сообщения
21
Благодарностей
1
Баллы
3
Тебе надо спарсить тайминг , а потом сравнить их, как-то так.
C#:
var dateOne = DateTime.ParseExact(project.Variables["dateOne"].Value, "HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
var dateTwo = DateTime.ParseExact(project.Variables["dateTwo"].Value, "HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);

TimeSpan diff = dateTwo - dateOne;
return diff.TotalHours;
За надежность не ручаюсь, лежит в загашнике давно, не проверял)
Код рабочий, но не универсальный. Он показывает разницу во времени и не принимает значения, где только минуты и секунды. Надо усидеть на двух стульях, что бы и видео часовые и минутные и менее минуты норм обрабатывались.
Может XPath умеет 10:10 > 10:11 так сравнивать?
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 385
Баллы
113
Надо переводить в секунды. Соберем мысли и наведем немного порядок.
Предположим, в первой переменной у Вас лежит время из входных настроек. Учтем, что разделитель между часами, минутами и секундами должен быть ':'.
А во вторую Вы уже спарсили значение с карточки ролика.
Вот это в общий код
C#:
        public static int SecondsFromVideoLengthString(string time){
            int seconds = 0;
            string[] ranges = time.Split(':').Reverse().ToArray();
            for(int i = 0; i < ranges.Length; i++){
                int t = int.Parse(ranges[i]);
                if(i == 1)
                    t = t * 60;
                if(i == 2)
                    t = t * 3600;
                seconds += t;
            }
            return seconds;
        }
А в кубике C# в проекте просто сравниваем эти две строчки
C#:
if(CommonCode.SecondsFromVideoLengthString(project.Variables["dateOne"].Value) >= CommonCode.SecondsFromVideoLengthString(project.Variables["dateTwo"].Value))
    return 0;
else throw new Exception("Первое время меньше второго");
В итоге по красной ветке из кубика логика уйдет, если длительность ролика превышает допустимое значение из входных настроек
 

Solist

Client
Регистрация
02.05.2021
Сообщения
21
Благодарностей
1
Баллы
3
Надо переводить в секунды. Соберем мысли и наведем немного порядок.
Предположим, в первой переменной у Вас лежит время из входных настроек. Учтем, что разделитель между часами, минутами и секундами должен быть ':'.
А во вторую Вы уже спарсили значение с карточки ролика.
Вот это в общий код
C#:
        public static int SecondsFromVideoLengthString(string time){
            int seconds = 0;
            string[] ranges = time.Split(':').Reverse().ToArray();
            for(int i = 0; i < ranges.Length; i++){
                int t = int.Parse(ranges[i]);
                if(i == 1)
                    t = t * 60;
                if(i == 2)
                    t = t * 3600;
                seconds += t;
            }
            return seconds;
        }
А в кубике C# в проекте просто сравниваем эти две строчки
C#:
if(CommonCode.SecondsFromVideoLengthString(project.Variables["dateOne"].Value) >= CommonCode.SecondsFromVideoLengthString(project.Variables["dateTwo"].Value))
    return 0;
else throw new Exception("Первое время меньше второго");
В итоге по красной ветке из кубика логика уйдет, если длительность ролика превышает допустимое значение из входных настроек
Первый код вставил и в кубик с кодом и в код проекта. Кубик выходит зеленый, но логику не проходит.

И так и так пробовал, и значения местами менял и переменные меня на {-Variable.dateOne-}, ника не проходит.

C#:
if(CommonCode.SecondsFromVideoLengthString(project.Variables["dateOne"].Value) >= CommonCode.SecondsFromVideoLengthString(project.Variables["dateTwo"].Value))
    return 0;
else throw new Exception("Первое время меньше второго");
 
   if(CommonCode.SecondsFromVideoLengthString({-Variable.dateOne-}.Value) >= CommonCode.SecondsFromVideoLengthString({-Variable.dateTwo-}.Value))
    return 0;
else throw new Exception("Первое время меньше второго");
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)