web-dev-qa-db-fra.com

Jours, heures, minutes, secondes entre deux dates

J'ai deux rendez-vous, un de moins que l'autre. Je veux créer une chaîne comme celle-ci

"0 jours, 0 heures, 23 minutes, 18 secondes"

représentant la différence entre les deux dates. Comment puis-je obtenir ces éléments de cette chaîne?

38
Sachin Kainth

TimeSpan est l'objet dont vous avez besoin:

TimeSpan span = (DateTime.Now - DateTime.Now);

String.Format("{0} days, {1} hours, {2} minutes, {3} seconds", 
    span.Days, span.Hours, span.Minutes, span.Seconds);
90
Alexei Levenkov

Lorsque vous soustrayez une DateTime d'une autre, vous obtenez une instance TimeSpan , qui expose ces valeurs.

TimeSpan diff = DateTime.Now - DateTime.Today;
string formatted = string.Format(
                       CultureInfo.CurrentCulture, 
                       "{0} days, {1} hours, {2} minutes, {3} seconds", 
                       diff.Days, 
                       diff.Hours, 
                       diff.Minutes, 
                       diff.Seconds);
10
bdukes

Utilisez un TimeSpan

DateTime startTime = DateTime.Now;

DateTime endTime = DateTime.Now.AddSeconds( 75 );

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
Console.WriteLine( "Time Difference (hours): " + span.Hours );
Console.WriteLine( "Time Difference (days): " + span.Days );

String yourString = string.Format("{0} days, {1} hours, {2} minues, {3} seconds",
    span.Days, span.Hours, span.Minutes, span.Seconds);
5
Shawn

Utilisez la classe TimeSpan , que vous obtiendrez en soustrayant les dates.

Vous pouvez formater la sortie à l'aide de chaînes de format standard ou custom .

"0 jours, 0 heures, 23 minutes, 18 secondes"

peut être obtenu avec quelque chose comme:

TimeSpan ts = DateTime.Now - DateTime.Today;
Console.WriteLine(
   string.Format("{0:%d} days, {0:%h} hours, {0:%m} minutes, {0:%s} seconds", ts)
);

OMI, c'est plus propre et plus facile à utiliser string.Format au lieu d'avoir à échapper les mots de votre chaîne de format (dont vous auriez besoin si vous venez d'utiliser .ToString) ou le construire manuellement.

4
Mark Brackett

N'oubliez pas que si vous voulez que ce calcul soit portable, vous devez le stocker en UTC, puis lorsque vous l'affichez, le convertir en heure locale. En règle générale, enregistrez les dates au format UTC et convertissez-les en heure locale pour la présentation.

3
ComeIn

Avez-vous essayé d'utiliser

TimeSpan()

qui peut certainement faire ce que vous voulez

2
General Grey

Que diriez-vous quelque chose comme ça?

    TimeSpan diff = dateTimeNew - dateTimeOld;
    string output = string.Format("{0} days, {1} hours, {2} minues, {3} seconds", diff.Days, diff.Hours, diff.Minutes, diff.Seconds);
    Console.WriteLine(output);
2
CodeHxr
    DateTime myDay = DateTime.Now;
    DateTime otherDate = DateTime.Now.AddYears(1);
    var test = otherDate.Subtract(myDay);
    Console.WriteLine("Days:" + test.Days + "Hours:" + test.Hours +"Minutes" +  test.Minutes +"Seconds" + test.Seconds);

Ici le test est de type TimeStamp

2
Habib
TimeSpan diffTime = dateTimeNew -PreviousDate;
int days=diffTime.Days;
int hours=diffTime.Hours;
int minutes=diffTime.Minutes;
int seconds=diffTime.Seconds;
1
Vinay