Vinodh Muthusamy Ответов: 4

Чтобы взять разницу во времени в timespan в C#


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

например: time1: 18:41:46
время 2: 18:42:12
когда timer2 - timer1
мой вывод должен быть 0:01:26

но я получаю вывод как 00:00:26 . пожалуйста, исправьте мою проблему


try
           {


               List<string> distinct = list.Distinct().ToList();

               foreach (string value in distinct)
               {

                   string svalue = value.Split(';')[1];
                   if (svalue == "SessionUnlock")
                   {
                       unlockvalue = value.Split(';')[0];
                       dt1 = DateTime.ParseExact(unlockvalue, "HH:mm:ss", new DateTimeFormatInfo());
                   }
                   else
                   {
                       lockvalue = value.Split(';')[0];
                        dt2 = DateTime.ParseExact(lockvalue, "HH:mm:ss", new DateTimeFormatInfo());
                       TimeSpan ts = dt2.Subtract(dt1);
                       MessageBox.Show(ts.ToString());
                   }


               }


Внутри списка Distict у меня есть такой список как

[0]=18:37:20;SessionUnlock
[1]=18:37:54;SessionLock
[2]=18:41:46;SessionUnlock
[3]=18:42:12;SessionLock

Что я уже пробовал:

try
            {


                List<string> distinct = list.Distinct().ToList();

                foreach (string value in distinct)
                {

                    string svalue = value.Split(';')[1];
                    if (svalue == "SessionUnlock")
                    {
                        unlockvalue = value.Split(';')[0];
                        dt1 = DateTime.ParseExact(unlockvalue, "HH:mm:ss", new DateTimeFormatInfo());
                    }
                    else
                    {
                        lockvalue = value.Split(';')[0];
                         dt2 = DateTime.ParseExact(lockvalue, "HH:mm:ss", new DateTimeFormatInfo());
                        TimeSpan ts = dt2.Subtract(dt1);
                        MessageBox.Show(ts.ToString());
                    }
                                 
                   
                }

Bryian Tan

00:00:26 секунд кажутся мне правильными. В этом раунде машина победила!!

4 Ответов

Рейтинг:
35

OriginalGriff

Это потому, что результат-26 секунд, а не одна минута и 26 секунд:

18:42:12 - 18:41:46 == 26 seconds
18:37:54 - 18:37:20 == 34 seconds


Рейтинг:
2

Graeme_Grant

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

DateTime dt1 = DateTime.Now;
DateTime dt2 = dt1 + new TimeSpan(1, 23, 46);
TimeSpan ts = dt2 - dt1;

Console.WriteLine(ts); // outputs: 01:23:46


Надеюсь, это поможет...


Рейтинг:
2

phil.o

Лучшим подходом к точному измерению разницы во времени было бы использование Секундомер[^].


Рейтинг:
1

F-ES Sitecore

Цитата:
например: time1: 18:41:46
время 2: 18:42:12
когда timer2 - timer1
мой вывод должен быть 0:01:26


Есть 26 секунд между этими временами, ваш вывод правильный. Добавьте 14 секунд к 18:41:46, чтобы добраться до 18:42:00, а затем еще 12 приведет вас к 18:42:21. 14 + 12 = 26.