我将这种格式'00 .000'的小时值转换为小时和分钟格式。所以'02 .500'将是'02:30',我也必须反过来这样做。
我构建了一个测试,看看它是如何工作的,
<%
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>");
}
}
}
%>
我遇到的问题是,当我转换为字符串时,我会从转换中释放余数,这会在转换回来时抛出该值。
这是前10秒的输出。
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
你可以看到我开始的并不总是我最终的结果。
如何正确地将时间值字符串“HH:MM”转换为小数字符串“00.000”并再次正确返回。
由于
编辑:
我试过了,
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);
但我得到Converted =“02.033”和TimeString2 =“2:01”。它应该等于“2:02”。当我强迫它为“00.000”时,我想我正在失去剩余部分。
答案 0 :(得分:8)
要将字符串转换为小时,请使用:
string time = "1:30";
double hours = TimeSpan.Parse(time).TotalHours; // -> 1.5
反过来说,您可以使用:
double hours = 1.5;
string time = TimeSpan.FromHours(hours).ToString(); // -> "00:01:30"
答案 1 :(得分:7)
为什么不直接使用DateTime.Parse?
答案 2 :(得分: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