Convertir une chaine en heure et faire des calculs [Résolu]

Messages postés
40
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
8 août 2012
- - Dernière réponse : haddreezy
Messages postés
40
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
8 août 2012
- 16 mai 2012 à 15:33
Bonjour,

pour mon projet en C#, j'ai besoin de récupérer des données d'un fichier xml pour les utiliser. J'ai extrait des informations temporelles sous forme de string "HH:mm:ss:fff" et j'aimerais les convertir pour ensuite faire des soustractions.
J'ai donc converti les strings en DateTime avec la fonction DateTime.ParseExact, mais j'obtiens également la date, ce dont je n'ai pas besoin. Pouvez vous me dire comment faire pour simplement récupérer mon information sur l'heure?

Voici mon code:

string pattern3 = @"(?<Temps>([0-9]+:[0-9]+:[0-9]+.[0-9]+Z))";
Regex searchRegEx3 = new Regex(pattern3);
Match correspondance3 = searchRegEx3.Match(s1);
string temps = correspondance3.Groups["Temps"].Value;


// Création échelle de temps

string temps1 = temps.Substring(0, 12);
DateTime h = DateTime.ParseExact(temps1, "HH:mm:ss.fff", null);
Console.Write(h);
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
3
Merci
alors prends la méthode "TimeOfDay" qui renvoie un TimeSpan

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Tupad
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
3
Merci
Fais comme suit:

TimeSpan ts = null
foreach (XmlNode nd in nodeList)
{
// tu récupères tes données
// ...

TimeSpan h1 = h.TimeOfDay;
if(ts = null)
ts = h1;
else
h1 -= ts;
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Tupad
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
0
Merci
simplement
Console.Write(h.ToLongTimeString());
Commenter la réponse de Tupad
Messages postés
40
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
8 août 2012
3
0
Merci
Le problème est que cette méthode me renvoie un string alors que j'ai besoin d'une valeur numérique pour ensuite faire des opérations telles que des soustractions. C'est pour cela que je souhaitais récupérer l'information sous type DateTime et faire des soustractions qui me donneront un tyoe TimeSpan
Commenter la réponse de haddreezy
Messages postés
40
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
8 août 2012
3
0
Merci
Merci pour ton aide, j'arrive effectivement à récupérer que l'heure sous un format qui va pouvoir me permettre de faire des soustractions.

string temps1 = temps.Substring(0, 12);
DateTime h = DateTime.ParseExact(temps1, "HH:mm:ss.fff", null);
TimeSpan h1 = h.TimeOfDay;
Console.Write(h1);

J'aurais une dernière question, je ne sais pas si c'est ici que je dois la poser, c'est plus de l'ordre algorithmique:

dans mon programme je parcours différents noeuds de mon fichier xml avec l'instruction:

"foreach (XmlNode nd in nodeList)".

Je récupère dans chaque noeud une information temporelle:

" string pattern3 = @"(?<Temps>([0-9]+:[0-9]+:[0-9]+.[0-9]+Z))";
Regex searchRegEx3 = new Regex(pattern3);
Match correspondance3 = searchRegEx3.Match(s1);
string temps = correspondance3.Groups["Temps"].Value;"

Ensuite je fais la conversion comme tu me l'as indiqué:

" string temps1 = temps.Substring(0, 12);
DateTime h = DateTime.ParseExact(temps1, "HH:mm:ss.fff", null);
TimeSpan h1 = h.TimeOfDay;"

Ce que je voudrais faire, c'est lors des prochaines boucles, faire la différence entre le h1 de l'itération en cours et le h1 de la première
(h1(i)-h1(0)). Mais je ne sais pas comment garder cette première valeur de h1 pour l'utiliser ensuite dans les autres boucles.

J'espère que j'ai été assez claire pour que vous puissiez m'aider.
Commenter la réponse de haddreezy
Messages postés
40
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
8 août 2012
3
0
Merci
Merci pour cette boucle ça marche très bien. J'ai simplement modifié quelque peu ton code. De plus, chez moi TimeSpan ts = null; ne fonctionne pas, j'ai donc écrit TimeSpan ts = TimeSpan.Zero; Voici finalement mon code:

TimeSpan ts = TimeSpan.Zero;
foreach (XmlNode nd in nodeList)
{
// je récupère mes données
// ...

TimeSpan h1 = h.TimeOfDay;
if (ts == TimeSpan.Zero)
{

// Ecriture dans fichier texte
monStreamWriter.WriteLine(string.Format("{0},{1},{2},{3}", nom, puissance1, coordonnées, ts));
Console.Write(ts);
Console.Write("\n");
ts = h1;

}
else
{

TimeSpan h2 = h1.Subtract(ts);
// Ecriture dans fichier texte
monStreamWriter.WriteLine(string.Format("{0},{1},{2},{3}", nom, puissance1, coordonnées, h2));
Console.Write(h2);
Console.Write("\n");
}

Merci encore infiniment pour ton aide.
Commenter la réponse de haddreezy