2017-01-25 5 views
0

У меня есть timePicker, который возвращает мне время вроде: «0:00 утра». Но мне нужно в моем приложении к югу времени начала от времени финиша и проверить, если он прошел один час, два ...string.Replace(); с двумя случаями?

Чтобы получить только номера из TimePicker, я сделал это:

string StartTime = _pickerStarts.Text; 
     string StartTime_int = string.Empty; 
     int _starts = 0; 

     for (int i = 0; i < StartTime.Length; i++) 
     { 
      if (Char.IsDigit(StartTime[i])) 
       StartTime_int += StartTime[i]; 
     } 

     if (StartTime_int.Length > 0) 
      _starts = int.Parse(StartTime_int); 


     string EndsTime = _pickerEnds.Text; 
     string EndsTime_int = string.Empty; 
     int _ends = 0; 

     for (int i = 0; i < EndsTime.Length; i++) 
     { 
      if (Char.IsDigit(EndsTime[i])) 
       EndsTime_int += EndsTime[i]; 
     } 

     if (EndsTime_int.Length > 0) 
      _ends = int.Parse(EndsTime_int); 

     // this return method is returning with the 00 on 4:00AM (example). CHANGE IT. 
     return _ends - _starts; 

Но, как вы можете догадаться, вместо того, чтобы вернуться, например, 9 с 9:00 утра, возвращается 900. Я сделал это в течение часов часов:

string StarTime_Formated = StartTime.Replace(":00", ""); 

И я должен был бы сделать это за: 30 часов.

string StarTime_Formated = StartTime.Replace(":00", ",3"); 

Но тогда мне нужно сначала проверить содержимое строк, а затем отформатировать его. Есть ли способ сделать это (псевдокод):

string StarTime_Formated = StartTime.Replace(":00", ",3" && ":00", ""); 

EDIT: В ответ на комментарии ниже: Ну, компонент я использую возвращает строку. Это для контроля времени класса. Один класс может быть два раза в неделю по 1 часу каждого занятия или по одной раз в 2 часа в каждом классе. Если я это сделать:

if(_numDuration.Value == 2 && ClassDuration() == 2) 

ClassDuration() быть первым код на этом посту и _numDuration быть IntegerUpDown, чтобы выбрать 1 или 2 часов класса.

Метод вернется, например, «4:00 pm» и «6:00 pm», 600-400, и это намного выше двух. Мне нужно, чтобы он вернулся 2. Как я уже сказал, я могу сделать два разных .Replace("", ""); и проверить каждый случай, но мне интересно, могу ли я не просто string StarTime_Formated = StartTime.Replace(":00", ",3" && ":00", "");

Я бы использовал DateTime, если мог, но вы видите, это не мое приложение, и ... заказы. Это отстой.

Могу ли я это сделать, или я должен просто держать с двумя разделенными .Replace(), а затем проверить чехлы?

+1

Что случилось с просто 'если ((Конечное время - начальное время) .TotalHours> 1)' , и т.д.? – itsme86

+0

@ itsme86 Я считаю, что проблема в том, что обе строки –

+1

Что ?? У свойства DateTimePicker есть свойство Value. Это DateTime, а DateTime имеет свойства Minute, Hour, Seconds.Нет необходимости разбирать что-либо. – Steve

ответ

2

Проблема, которую вы пытаетесь решить, заключается в том, как анализировать строки времени?

Это сложно, и более нескольких строк кода нужно делать правильно. пусть DateTime сделает это за вас?

var start= DateTime.Parse(_pickerStarts.Text); 
var end= DateTime.Parse(_pickerEnds.Text); 
var result= end-start; 
var resultInHours= result.TotalHours; 
Console.WriteLine(result); 
Console.WriteLine(resultInHours); 

----------------------------------------

Для замены строки, возможно, у вас может быть опечатка в вашем вопросе. Вы хотите:

string StarTime_Formated = StartTime.Replace(":30", ",3").Replace(":00", ""); 
+0

Действительно оценивайте ответ, но это не DateTimes, те, с которыми я работаю, являются строками. Мне просто интересно, могу ли я сделать .Replace() для двух разных случаев в одном методе .Replace(). – Pelicer

+0

Вы заметили, что я начинаю с строк? –

+0

Так что извините, перечитайте ответ только сейчас. Скоро сделают и проведут проверку, если это сработает. – Pelicer

1

Попробуйте это (возможно, вам придется настроить формат, но это должно работать)

var startDate = DateTime.ParseExact(your_start_time_string, "hh:mma", CultureInfo.InvariantCulture); 
var endDate = DateTime.ParseExact(your_end_time_string, "hh:mma", CultureInfo.InvariantCulture); 
var r = endDate-startDate; 
//do further processing on result 
Смежные вопросы