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

Signaler
Messages postés
40
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
8 août 2012
-
Messages postés
40
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
8 août 2012
-
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);

6 réponses

Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
alors prends la méthode "TimeOfDay" qui renvoie un TimeSpan
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
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;
}
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
simplement
Console.Write(h.ToLongTimeString());
Messages postés
40
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
8 août 2012
3
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
Messages postés
40
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
8 août 2012
3
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.
Messages postés
40
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
8 août 2012
3
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.