2009-09-22 10 views
3

Je convertis une valeur d'heure fractionnaire dans ce format '00, 000' en format heure et minute. Alors que '02 .500 'sera '02: 30' et je dois aussi faire cela en sens inverse.Conversion de chaîne en durée et retour

J'ai construit un test pour voir comment cela va fonctionner,

<% 
    TimeSpan tspan; 
    TimeSpan tspan2; 

    string TimeString; 
    string TimeString2; 
    string Converted; 
    double ConvTime; 
    for (int HH = 0; HH < 24; HH++) 
    { 
     for (int M1 = 0; M1 < 6; M1++) 
     { 
      for (int M2 = 0; M2 < 10; M2++) 
      { 
       TimeString = HH.ToString() + ":" + M1.ToString() + M2.ToString(); 

       // Convert Time String to Fractional Hours 
       tspan = TimeSpan.Parse(TimeString); 
       ConvTime = Convert.ToDouble(tspan.TotalHours); 
       Converted = String.Format("{0:00.000}", ConvTime); 

       // Convert Fractional Hour String to Time String 
       tspan2 = TimeSpan.FromHours(Convert.ToDouble(Converted)); 
       TimeString2 = string.Format("{0:D1}:{1:D2}", tspan2.Hours, tspan2.Minutes); 


       Response.Write(TimeString + " = "); 
       Response.Write(Converted + " = "); 
       Response.Write(TimeString2 + "<br>"); 
      } 
     } 
    }  
%> 

Le problème que j'ai est que lorsque je convertir en une chaîne que je lâche le reste formant le converstion, qui jette la valeur lors de la conversion arrière.

Voici la sortie pour les 10 premières secondes. Comme vous pouvez le voir avec ce que j'ai commencé n'est pas toujours ce que je finis avec

0:00 = 00.000 = 0:00 
0:01 = 00.017 = 0:01 
0:02 = 00.033 = 0:01 
0:03 = 00.050 = 0:03 
0:04 = 00.067 = 0:04 
0:05 = 00.083 = 0:04 
0:06 = 00.100 = 0:06 
0:07 = 00.117 = 0:07 
0:08 = 00.133 = 0:07 
0:09 = 00.150 = 0:09 
0:10 = 00.167 = 0:10 

Comment convertir correctement une chaîne de valeur de temps "HH: MM" en une chaîne fractionnaire "00.000" et revenir correctement.

Merci

EDIT:

J'ai essayé,

TimeString = "02:02"; 
Converted = TimeSpan.Parse(TimeString).TotalHours.ToString("00.000"); 

tspan2 = TimeSpan.FromHours(Convert.ToDouble(Converted)); 
TimeString2 = string.Format("{0:D1}:{1:D2}", tspan2.Hours, tspan2.Minutes); 

Mais je reçois Converti = "02,033" et TimeString2 = "02:01". Cela devrait égaler "2:02". Je pense que je perds le reste quand je le force à "00.000".

Répondre

7

Pourquoi n'utilisez-vous pas simplement DateTime.Parse?

7

Pour convertir une chaîne à une heure, utilisez ceci:

string time = "1:30"; 
double hours = TimeSpan.Parse(time).TotalHours; // -> 1.5 

Pour l'inverse, vous pouvez utiliser ceci:

double hours = 1.5; 
string time = TimeSpan.FromHours(hours).ToString(); // -> "00:01:30" 
0
//Parse both strings to TimeSpan 
var ts = TimeSpan.FromHours(Double.Parse("02.500")); 
var ts2 = TimeSpan.Parse("02:30"); 

//Convert a TimeSpan to string format 
var firstFormat = ts.Hours.ToString.PadLeft(2, '0') 
        + ":" + ts.Minutes.ToString.PadLeft(2, '0'); 
//Result: 02:30 
var secondFormat = ts.TotalHours.ToString("00.000"); 
//Result: 02.500 
Questions connexes