Comment obtenir le décalage horaire entre deux objets DateTime à l'aide de C #?

159

Comment obtenir le décalage horaire entre deux DateTimeobjets en utilisant C #?

Étain
la source

Réponses:

227

L'exemple suivant montre comment procéder:

DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
Console.WriteLine(b.Subtract(a).TotalMinutes);

Lorsqu'il est exécuté, cela imprime "30" car il y a une différence de 30 minutes entre la date et l'heure.

Le résultat de DateTime.Subtract(DateTime x)est un objet TimeSpan qui donne d'autres propriétés utiles.

Daniel Renshaw
la source
5
Pour afficher la différence, faire quelque chose comme ceci: Console.WriteLine((a - b).ToString(@"hh\:mm\:ss")). Voir: MSDN Custom TimeSpan Format
ishmael
Cela a fonctionné pour moi. Je voulais juste combien de secondes il faut au client pour passer un appel REST et obtenir une réponse.
Ziggler le
1
Faites attention à l'utilisation TotalMinutes! (not Minutes)
Shahar Shokrani
64

Vous voulez la TimeSpanstructure:

TimeSpan diff = dateTime1 - dateTime2;

Un objet TimeSpan représente un intervalle de temps (durée ou temps écoulé) qui est mesuré comme un nombre positif ou négatif de jours, heures, minutes, secondes et fractions de seconde. La structure TimeSpan peut également être utilisée pour représenter l'heure du jour, mais uniquement si l'heure n'est pas liée à une date particulière.

Il existe différentes méthodes pour récupérer les jours, heures, minutes, secondes et millisecondes de cette structure.

Si vous êtes simplement intéressé par la différence, alors:

TimeSpan diff = Math.Abs(dateTime1 - dateTime2);

vous donnera la différence positive entre les heures quelle que soit la commande.

Si vous venez d'obtenir le composant horaire mais que les heures peuvent être fractionnées avant minuit, vous devez ajouter 24 heures à l'intervalle pour obtenir la différence réelle:

TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
    diff = diff + TimeSpan.FromDays(1);
}
ChrisF
la source
salut, si datetime2 est 09:00 et dateTime1 est 18:00 alors diff est 09Hours 00 min. alors quelle est l'équation pour datetime2 est 21:00 et dateTime1 est 03:00 alors la différence est négative et fausse. Comment résoudre ça?
Pranesh Janarthanan
@Pranesh - si les objets contiennent une date, il ne devrait pas y avoir de problème. S'ils ne contiennent pas d'heure, prenez la différence absolue ou ajoutez 24 heures à la période pour donner une différence positive. Ce qui est correct dépendra de votre application.
ChrisF
Ouais, j'ai déjà supprimé ces commentaires! pouvez-vous me montrer un exemple de code pour votre explication?
Pranesh Janarthanan
30

Ce dont vous avez besoin est d'utiliser la méthode Subtract des classes DateTime , qui renvoie un TimeSpan .

var dateOne = DateTime.Now;
var dateTwo = DateTime.Now.AddMinutes(-5);
var diff = dateTwo.Subtract(dateOne);
var res = String.Format("{0}:{1}:{2}", diff.Hours,diff.Minutes,diff.Seconds));
Nate
la source
10

La façon dont je le fais habituellement est de soustraire les deux DateTime et cela me donne un TimeSpan qui me dira le diff.

Voici un exemple:

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;
Darik
la source
4

S'ils sont tous les deux des valeurs date-heure UTC, vous pouvez le faire TimeSpan diff = dateTime1 - dateTime2;

Sinon, vos chances d'obtenir la bonne réponse dans tous les cas possibles sont nulles.

Ian Mercer
la source
3
 var startDate = new DateTime(2007, 3, 24);

 var endDate = new DateTime(2009, 6, 26);

 var dateDiff = endDate.Subtract(startDate);

 var date = string.Format("{0} years {1} months {2} days", (int)dateDiff.TotalDays / 365, 
 (int)(dateDiff.TotalDays % 365) / 30, (int)(dateDiff.TotalDays % 365) / 30);

 Console.WriteLine(date);
Mukund
la source
2

Vous devez utiliser un TimeSpan . Voici un exemple de code:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);
Jason Webb
la source
2
Ou justeTimeSpan sincelast = DateTime.Now - LastUpdate;
Ben M
2
private void button1_Click(object sender, EventArgs e)
{
    TimeSpan timespan;
    timespan = dateTimePicker2.Value - dateTimePicker1.Value;
    int timeDifference = timespan.Days;
    MessageBox.Show(timeDifference.ToString());
}
Poêle Wong Lok
la source
2

Vous pouvez utiliser de la manière suivante pour obtenir une différence entre deux objets Datetime. Supposons qu'il y ait des objets DateTime dt1 et dt2 puis le code.

TimeSpan diff = dt2.Subtract(dt1);
Sunny Sandeep
la source