Преобразование 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"
Ответы
Ответ 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}";
Ответ 3
Вы можете использовать методы TimeSpan:
ToString("hh':'mm")
// or
ToString(@"hh\:mm")
Также проверьте все доступные форматы здесь http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
Ответ 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;