Обойти для разбора TimeSpan 24:00 - PullRequest
6 голосов
/ 15 сентября 2011

У меня есть небольшая проблема с классом TimeSpan, где он может анализировать 23:59, но не 24: 00.

Конечно, клиент хочет ввести 24:00, чтобы указать конец дня, а не 23:59 или 00:00, поскольку 00:00 указывает на начало дня.

В настоящее время мой код анализирует время окончания примерно так:

if ( !TimeSpan.TryParse( ( gvr.FindControl( "txtTimeOff" ) as TextBox ).Text, out tsTimeOff ) )
{
   this.ShowValidationError( String.Format( "Please enter a valid 'Time Off' on row '{0}'.", gvr.RowIndex + 1 ) );
   return false;
}

Как лучше обойти эту ситуацию?

РЕДАКТИРОВАТЬ: (Решение 1)

if ( ( gvr.FindControl( "txtTimeOff" ) as TextBox ).Text == "24:00" )
{
    tsTimeOff = new TimeSpan( 24, 0, 0 );
}
else
{
    if ( !TimeSpan.TryParse( ( gvr.FindControl( "txtTimeOff" ) as TextBox ).Text, out tsTimeOff ) )
    {
         this.ShowValidationError(
            String.Format( "Please enter a valid 'Time Off' on row '{0}'.", gvr.RowIndex + 1 ) );
         return false;
    }
}

РЕДАКТИРОВАТЬ: (решение2)

string timeOff = ( gvr.FindControl( "txtTimeOff" ) as TextBox ).Text;

if ( !TimeSpan.TryParse(
        timeOff == "24:00" ? "1.00:00:00" : timeOff
        , out tsTimeOff ) )
{
    this.ShowValidationError(
        String.Format( "Please enter a valid 'Time Off' on row '{0}'.", gvr.RowIndex + 1 ) );
    return false;
}

Ответы [ 4 ]

8 голосов
/ 15 сентября 2011

попробуйте что-то вроде этого

textBox = (TextBox) gvr.FindControl ("txtTimeOff");

TimeSpan.TryParse (textBox.Text == "24:00"
                      ? "1.00:00"
                      : textBox.Text,
                   out tsTimeOff)
4 голосов
/ 14 мая 2013

этот код может вам помочь:

string span = "35:15";
TimeSpan ts = new TimeSpan(int.Parse(span.Split(':')[0]),    // hours
                           int.Parse(span.Split(':')[1]),    // minutes
                           0);                               // seconds

от: Как проанализировать строку с часами больше 24 до TimeSpan?

4 голосов
/ 15 сентября 2011

Честно говоря, лучшим решением будет сообщить вашему клиенту, что 24:00 не является действительным часом, и что он должен использовать 0:00. Я никогда не видел скачка часов с 23:59 до 24:00.

Но если вы настаиваете ... проверьте следующий вопрос, который содержит тот же вопрос и содержит множество возможных решений:

Время разбора более 24 часов в C #

4 голосов
/ 15 сентября 2011

Обычно класс System.TimeSpan не подходит для представления «момента времени», а, как следует из названия, «промежутка» времени или продолжительности.Если вы можете реорганизовать свой код для использования System.DateTime или, что еще лучше, System.DateTimeOffset, это будет лучшим решением.Если это невозможно, лучшим ответом будет Yahia:)

...