Convertir une chaine en heure et faire des calculs

Résolu
haddreezy Messages postés 40 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 8 août 2012 - 16 mai 2012 à 12:31
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);

6 réponses

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
haddreezy Messages postés 40 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 8 août 2012 4
16 mai 2012 à 14:34
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.
0
haddreezy Messages postés 40 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 8 août 2012 4
16 mai 2012 à 15:33
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.
0
Rejoignez-nous