将双精度转换为日期时间

时间:2014-03-03 14:46:30

标签: c# datetime

我的表中有一个用户输入值。 如果用户输入3.2,则表示3小时20分钟。

我显示了整个星期内用户输入的总小时数。

输入是:
太阳:3.2
星期一:4.5
星期二:5.0

现在,3.2 + 4.5 + 5.0 = 12.70,这意味着12小时70分钟。 但是,我希望结果是13.10(13小时10分钟)而不是12.70。

我需要在一个选择查询中的总数,该查询将我的网格与其余数据绑定在一起。

目前我在选择查询中使用sum函数以及其他列。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

您的输入格式根本不起作用。

你很幸运,它在你的例子中,但在大多数情况下它不会。例如,如果2个人输入“1小时50分钟”:

1.5 + 1.5 = 3.0

你不能把它读成:“三个小时”,因为实际上它是“3小时40分钟”。

一旦“分钟”的总和大于0.99,你就错了。


但是在少数幸运的情况下,你可以做一些算术运算(如果你想要一个与输入相同的“双”格式的结果)?

var inputList = new List<double>() {3.2, 4.5, 5.0};
double total = inputList.Sum();

int baseHours = (int)Math.Floor(total);
int realBaseHours = (int)inputList.Sum(d => Math.Floor(d));

if (baseHours > realBaseHours)
    throw new Exception("All hell breaks loose!");

int baseMinutes = (int)(total * 100.0 - baseHours * 100.0);

int finalHours = baseHours + baseMinutes / 60;
int finalMinutes = baseMinutes % 60;

double result = finalHours + finalMinutes / 100.0;

答案 1 :(得分:0)

将时间保存为双重格式并不好,但对于您的问题:

将所有时间作为double值数组获取并进行一些算术运算:

double[] times = { 3.2, 4.5, 5.0 };
int hours = 0;
int minuts = 0;
string[] values;
foreach (double t in times)
{
  values = t.ToString("#.00").Split('.');
  hours += int.Parse(values[0]);
  minuts += int.Parse(values[1]);
}
hours += minuts / 60;
minuts += minuts % 60;

它适用于所有类型的双格式。