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

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

Votre réponse

6 réponses

Meilleure réponse
Tupad 239 Messages postés lundi 5 décembre 2005Date d'inscription 27 août 2012 Dernière intervention - 16 mai 2012 à 14:07
3
Merci
alors prends la méthode "TimeOfDay" qui renvoie un TimeSpan

Merci Tupad 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de Tupad
Meilleure réponse
Tupad 239 Messages postés lundi 5 décembre 2005Date d'inscription 27 août 2012 Dernière intervention - 16 mai 2012 à 14:59
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;
}

Merci Tupad 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de Tupad
Tupad 239 Messages postés lundi 5 décembre 2005Date d'inscription 27 août 2012 Dernière intervention - 16 mai 2012 à 12:43
0
Merci
simplement
Console.Write(h.ToLongTimeString());
Commenter la réponse de Tupad
haddreezy 40 Messages postés lundi 14 mai 2012Date d'inscription 8 août 2012 Dernière intervention - 16 mai 2012 à 13:49
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
haddreezy 40 Messages postés lundi 14 mai 2012Date d'inscription 8 août 2012 Dernière intervention - 16 mai 2012 à 14:34
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
haddreezy 40 Messages postés lundi 14 mai 2012Date d'inscription 8 août 2012 Dernière intervention - 16 mai 2012 à 15:33
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.