0

我有几个日期时间的列表。DateTime 实际上是 HH:mm:ss 格式的字符串,我将其转换为 DateTime。

从这个列表中我检索到最大值(以分钟为单位)

我计算总分钟数如下:

//t is a DateTime
Double totalMin = TimeSpan.Parse(t.ToString()).TotalMinutes;

最大值(以分钟为单位)应用作“100%”值。我已经计算了列表的最大值。

这意味着列表中的所有其他值(也以分钟为单位)将基于此值进行计算。换句话说,其他较低的值必须在这个最大值上进行缩放。

这将在条形图中使用。因此,最大值将占用最多的空间,然后是较低的值。

我到底该怎么做?

谢谢彼得P。

4

3 回答 3

3

您想知道如何计算百分比吗?将电流除以最大值并乘以 100。然后您可以根据需要格式化百分比(例如“20%”、“20.2%”……)。

Double max = 200d;
Double current = 23d;

Double percent = current / max * 100;
于 2012-04-19T08:00:22.843 回答
1

时间跨度是在某个时间单位内,两个 DateTime 之间的差异。您正在解析日期时间。你会得到一个 FormatException:

Double UhOh = TimeSpan.Parse(DateTime.Now.ToString()).TotalMinutes;

结果是:

System.FormatException: "Input string was not in a correct format."

现在要回答您的问题,您将需要另一条数据:另一个 DateTime 以找出这两点之间的差异(以分钟为单位)。

假设您要使用:

DateTime.Now

这会起作用:

DateTime t = new DateTime(2012,4,19,0,0,0);
TimeSpan ts = DateTime.Now - t;
Double mins = ts.TotalMinutes;

希望有帮助。(:

于 2012-04-19T08:11:01.953 回答
0

您正在解析Timespan并转换DateTime为并非真正需要的字符串。

你的意思是这样的吗

List<DateTime> lstdt = new List<DateTime>() {
                new DateTime(2010,5,5,1,10,0),
                new DateTime(2011,5,5,2,10,0),
                new DateTime(2010,8,5,1,10,0),
                new DateTime(2010,5,5,1,10,0),
                new DateTime(2011,11,5,1,10,0),
                new DateTime(2010,12,5,1,10,0),
            };            

double maxval = lstdt.Max(c => c.TimeOfDay.TotalMinutes);
List<double> lstpercent = lstdt.Select(d1 => d1.TimeOfDay.TotalMinutes/maxval *100.00).ToList<double>();
于 2012-04-19T08:05:09.773 回答