2014-07-18 3 views
-2

Мне нужна помощь, ребята, которые создают вычисление Overtime, и когда я пытаюсь получить значение значения hrs, он стал отрицательным, когда я вычитал PM на AM и PM П.М. сог мне нужно сосчитать часов, когда он достигнет в 10:00 PM ЭРВО мой кодКак я могу получить интервал в hrs AM до PM и PM до AM

  string value = comboBox91.Text; 
     string value2 = comboBox92.Text; 
     string awtsu = value; 
     DateTime dt; 
     DateTime dt2; 

     dt = DateTime.Parse(value); 
     string mystring; 
     mystring = dt.ToString("hh:mm tt"); 

     dt2 = DateTime.Parse(value2); 
     string mystring2; 
     mystring2 = dt2.ToString("hh:mm tt"); 


     double diff2 = (dt2 - dt).TotalHours; 
     textBox8.Text = Convert.ToString(diff2) + "Hrs"; 

     string pmm = "10:00 PM"; 

     DateTime pm = DateTime.Parse(pmm); 
     string mystring3; 
     mystring3 = pm.ToString("hh:mm tt"); 




     if (dt2 > pm) 
     { 
      double diff = (dt - dt2).TotalHours; 
      textBox9.Text = Convert.ToString(diff) + "Hrs"; 


     } 
     else 
     { 
      textBox9.Text = ("0"); 
     } 

$

ответ

0

Позвольте мне увидеть, если я понимаю ваши требования:

  1. рабочий запускается на стенде (8:30 утра) и обычно заканчивается в стандартное время (6:30 вечера), но может работать позже. Теоретически, что человек может работать в полночь на следующий день.

  2. Если они работают с 7 вечера до 10 вечера, им платят одну сверхурочную работу.

  3. Если они работают за 10 лет, эти часы оплачиваются второй скоростью.

Итак, первое, что вы должны объявить в своем коде список этих границ сверхурочные:

public static readonly TimeSpan[] OvertimeBoundaries = 
    { 
     TimeSpan.FromHours(19), // 7 PM 
     TimeSpan.FromHours(22) // 10 PM. 
    }; 

TimeSpan представляет собой структуру, которая представляет собой интервал времени, и подходит для представления ежедневно мероприятие.

Далее, учитывая рабоче время начала и окончания, вы хотите измерить общее количество часов для каждого из этих интервалов:

public static TimeSpan[] GetOvertimeWorked(DateTime startDateTime, DateTime endDateTime, IList<TimeSpan> overtimeBoundaries) 
    { 
     var overtimeWorked = new TimeSpan[overtimeBoundaries.Count]; 

     for (int i = 0; i < overtimeBoundaries.Count - 1; i++) 
     { 
      var time1 = startDateTime.Date + overtimeBoundaries[i]; 
      var time2 = startDateTime.Date + overtimeBoundaries[i + 1]; 
      if (time1 > time2) 
       throw new ArgumentException("overtimeBoundaries are not in order"); 
      if (endDateTime > time2) 
       overtimeWorked[i] = time2 - time1; 
      else if (endDateTime > time1) 
       overtimeWorked[i] = endDateTime - time1; 
      else 
       overtimeWorked[i] = TimeSpan.Zero; 
     } 

     if (overtimeWorked.Length > 0) 
     { 
      var timeLast = startDateTime.Date + overtimeBoundaries[overtimeBoundaries.Count - 1]; 
      if (endDateTime > timeLast) 
       overtimeWorked[overtimeBoundaries.Count - 1] = endDateTime - timeLast; 
      else 
       overtimeWorked[overtimeBoundaries.Count - 1] = TimeSpan.Zero; 
     } 

     return overtimeWorked; 
    } 

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

Ваш код был бы более понятным, если бы вы назвали ваши переменные значимым, а не именами «dt2» и «awtsu». Вы также должны, как минимум, отделить свою бизнес-логику от кода, который загружает и выгружает данные из пользовательского интерфейса.

Наконец, отмечу, что следующее опасно:

string pmm = "10:00 PM"; 
    DateTime pm = DateTime.Parse(pmm); 

Проблема здесь состоит в том, что, если вы проходите «DateTime.Parse» строка с только «время суток» компонента, он будет fill in the date information with the current clock setting on your computer. Вероятно, это приведет к случайным, трудновоспроизводимым ошибкам, если вы добавите свое приложение в приложение, потому что приложение может быть запущено или не работать в другой день, чем работали работники!

+0

umm В моем случае все работники начинаются в 8:30 и заканчиваются в 18:30, после чего сверхурочная работа начинается в 7 вечера и когда она достигает в 22 часа дня еще одного часа. после 10 вечера зарплата сверхурочных увеличивается. означающие 7-10 вечера и 10 вечера и далее - разные зарплаты. помогите мне, ребята, thx – cddr2012

+0

Итак, вам нужно количество отработанных часов от 7 до 10, а также количество отработанных часов после 10? – dbc

+0

да, сэр точно .. и когда им около часа в 7 вечера между 2 утра значение неверно – cddr2012

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