Подтвердить что ты не робот

Преобразование TimeSpan из формата "hh: mm: ss" в "hh: mm"

Я хочу показывать в TextBox только час и минуты

var test = dataRow.Field<TimeSpan>("fstart").ToString();  
//test ="08:00:00"  
var tb = (TextBox) gridViewRow.Cells[2].FindControl("fstart");
tb.Text = test;

как показывать только часы и минуты "hh.mm"

4b9b3361

Ответ 1

Вам нужно преобразовать ваши данные в TimeSpan, а затем использовать формат: "hh\:mm"

string test ="08:00:00";
TimeSpan ts = TimeSpan.Parse(test);
Console.Write(ts.ToString(@"hh\:mm"));

В вашем случае:

var test = dataRow.Field<TimeSpan>("fstart").ToString(@"hh\:mm"));

Не забудьте обойти двоеточие :

Вы можете увидеть: Пользовательские строки формата TimeSpan

Ответ 2

Нет необходимости конвертировать из hh.mm.ss в hh.mm. TimeSpan хранится как количество тиков (1 тик = 100 наносекунд). То, что вам нужно сделать, состоит в том, чтобы преобразовать это внутреннее двоичное представление в читаемую пользователем строку! Это называется форматированием. Если вы не укажете формат явно, будет использоваться формат по умолчанию. В этом случае hh.mm.ss.

string formatted = timespan.ToString(@"hh\.mm");

Примечание. Эта перегрузка ToString существует с .NET 4.0. Он не поддерживает символы разделителя даты и времени. Поэтому вы должны включать их как (экранированные) строковые литералы.

Обычный способ форматирования строк, по-видимому, не работает по какой-то нечетной причине (протестирован с .NET 3.5). (Неважно, удаляете ли вы символ разделителя или нет):

var timespan = TimeSpan.FromSeconds(1234);
string formatted = String.Format("{0:hh.mm}", timespan); // ==> 00:20:34

Однако вы можете построить строку, подобную этой

string formatted =
    String.Format("{0:00}.{1:00}", Math.Floor(timespan.TotalHours), timespan.Minutes);

или начиная с VS2015/С# 6.0, используя строчную интерполяцию:

string formatted = $"{Math.Floor(timespan.TotalHours):00}.{timespan.Minutes:00}";

Ответ 4

var test = dataRow.Field<TimeSpan>("fstart").ToString("hh.mm");  
//test ="08:00"  
var tb = (TextBox) gridViewRow.Cells[2].FindControl("fstart");
tb.Text = test;

Ответ 5

Предыдущие решения не запускаются, если часы > 24, попробуйте это решение, если у вас есть время в минутах очень большой

int minutes = 159000;
TimeSpan t = new TimeSpan(0, minutes, 0);

String HOURS = Math.Round(t.TotalHours, 0).ToString();
if (HOURS.Length==1)
{
    HOURS = "0"+HOURS;
}


String MINUTES = t.Minutes.ToString();
if (MINUTES.Length == 1)
{
    MINUTES = "0" + MINUTES;
}


String RESULT = HOURS + ":" + MINUTES;