web-dev-qa-db-fra.com

Convertir TimeSpan du format "hh: mm: ss" en "hh: mm"

Je veux afficher dans une zone de texte uniquement l'heure et les minutes

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

comment afficher uniquement les heures et les minutes "hh.mm"

30
Alex

Vous devez convertir vos données en TimeSpan, puis utiliser le format suivant: "hh\:mm"

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

Dans ton cas:

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

N'oubliez pas d'échapper au colon :

Vous pouvez voir: Chaînes de format TimeSpan personnalisées

62
Habib

Il n’est pas nécessaire de convertir de hh.mm.ss à hh.mm. TimeSpan est stocké sous forme de ticks (1 tick == 100 nanosecondes) et n'a pas de format inhérent. Ce que vous devez faire, c'est convertir la TimeSpan en une chaîne lisible par l'homme! Ceci s'appelle le formatage. Si vous ne spécifiez pas de format explicitement, un format par défaut sera utilisé. Dans ce cas, hh.mm.ss.

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

Remarque: cette surcharge de ToString existe depuis .NET 4.0. Il ne supporte pas les symboles de séparateur d'espace réservé de date et heure! Par conséquent, vous devez les inclure en tant que littéraux (échappés).  

La manière habituelle de formater les chaînes ne semble pas fonctionner pour une raison étrange (testé avec .NET 3.5). (Peu importe si vous échappez ou non au symbole séparateur):

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

Cependant, vous pouvez construire la chaîne comme ceci

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

ou en commençant par VS2015/C # 6.0, en utilisant une interpolation de chaîne:

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

Vous pouvez utiliser les méthodes TimeSpan:

ToString("hh':'mm")
// or
ToString(@"hh\:mm")

Vérifiez également tous les formats disponibles ici http://msdn.Microsoft.com/en-us/library/8kb3ddd4.aspx

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

Vous pouvez y parvenir en:

  var hhmm = TimeSpan.FromMinutes(minutes).ToString(@"hh\:mm")
0
Ravi Rajan

Les solutions précédentes ne fonctionnent pas si heures> 24, essayez cette solution si vous avez le temps en minutes très gros

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;
0
daniele3004