目前,我正在以这种形式向用户返回反馈:
"<UserName> removed 07:00, 07:15, 07:30, 07:45, 08:00, 08:15, 08:30, 09:00, 09:15, 09:30, 09:45, 10:00, 10:15, 10:30, 11:15, (etc.)"
...可以理解的是,他们希望它更加用户友好,例如:
<UserName> removed 07:00 - 8:30, 9:00 - 10:30, 11:15 - (etc.)
我不想重新设计将这些值连接到 StringBuilder 的整个方法,而是将第一个输出转换为第二个输出;就像是:
sbQuarterHoursRemoved = CombineSucceedingQuarterHours(sbQuarterHoursRemoved);
这在我看来是否很乏味,还是有人知道一种相对轻松的方式来完成它?
更新
我将下面的代码调整为:
String QuarterHoursRemovedPrettified = PrettifyQuarterHoursRemoved(sbQuarterHoursRemoved);
. . .
private static string PrettifyQuarterHoursRemoved(StringBuilder sbQuarterHoursRemoved)
{
string[] times = sbQuarterHoursRemoved.ToString().Split(',');
DateTime prevDt = new DateTime(1);
string prevString = "";
StringBuilder output = new StringBuilder();
foreach (string time in times) {
DateTime dt = DateTime.ParseExact(time, "HH:mm", CultureInfo.InvariantCulture);
if (dt.Subtract(prevDt).TotalMinutes > 15) {
if (prevString != "")
output.Append(" " + prevString + ",");
output.Append(" " + time + " -");
}
prevString = time;
prevDt = dt;
}
output.Remove(output.Length - 1, 1);
return output.ToString();
}
在这样的时间使用值(在调用 Split() 之后):
00:45
01:00
01:15
22:45
23:00
它总是在第二次通过循环时崩溃。第一次很好,但第二次,无论价值如何,都会崩溃。例如,第一次通过,dt 变为:
dt = 6/26/2012 12:45 am
...在调用 ParseExact() 之后
...但是第二次调用 ParseExact() - 例如,“01:00”作为“时间”中的值失败。
一些错误细节是:
*System.FormatException 未处理 Message=String 未被识别为有效的 DateTime。Source=mscorlib StackTrace:在 System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style) at System.DateTime.ParseExact(String s, String format, IFormatProvider provider) at TitanNextGen_Platypi.PlatypiMainForm.PrettifyQuarterHoursRemoved(StringBuilder sbQuarterHoursRemoved)在...*
再次更新
它现在有效 - 未修剪的 val 是问题所在。例如,当值是“01:15”而不是“01:15”时,所有达拉斯都松散了(我在调用 ParseExact() 时将“hh:mm”更改为“HH:mm”以占 24 -小时时间)