从给定的两个日期时间c#计算QuaterlyHour

时间:2010-05-12 12:36:33

标签: c# .net

我想从给定的两个日期时间计算季度小时数:

假设datetime1和datetime2,我有点像这样:

int d = datetime2.Subtract(datetime1).Hours;

 double l = Math.Round(Convert.ToDouble(d/4));

但是如果QuarterHour是3(即d = 3),那么显示输出的好方法是 - 它应该是零还是圆形: 3/4 = 0.75。所以我应该向上舍入到1或0是好的。 如果我最终要1 ...我应该怎么做?

4 个答案:

答案 0 :(得分:1)

如果你想知道两小时(例如0.75)的两个日期/时间之间的区别,那么这样就可以了:

DateTime a = new DateTime(2010, 05, 12, 13, 00, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
double difference = b.Subtract(a).Minutes / 60.0;

此处difference = 0.75

答案 1 :(得分:1)

由于获得“DateTime.Hours”不会让你自己获得四分之一小时,因此在这方面不太有用。 “DateTime.TotalHours”几乎可以工作,但由于四分之一小时只有15分钟,我们可以通过使用它来简化处理不必要的复杂小数小时。

double l = datetime2.Subtract(datetime1).TotalMinutes / 15.0

您可以使用Math.Round或任何类似方法将其包围,以获得四分之一小时的整数。使用适合您喜欢的圆形样式的任何方法(例如地板或天花板等)。我自己会推荐Math.Round

double l = Math.Round(datetime2.Subtract(datetime1).TotalMinutes / 15.0)

如果您想将此分数表示为分数仅为四分之一小时的总小时数,则可以将舍入结果除以4。

double l = Math.Round(datetime2.Subtract(datetime1).TotalMinutes / 15.0) / 4

现在,假设不是以十进制显示小时数,而是希望将两个日期时间之间的四分之一小时差异显示为类似时间的值。例如,将11个四分之一小时渲染为“2:45”而不是“2.75”。这自然不适用于存储为实际数字,但如果你需要输出,你可能会像这样构建字符串。

double l = Math.Round(datetime2.Subtract(datetime1).TotalMinutes / 15.0) / 4
double dLeft = Math.Floor(l);
double dRight = (l - dLeft) * 60.0;
string output = dLeft.ToString() + ":" + dRight.ToString();

答案 2 :(得分:0)

不确定你在这里问的是什么。您的代码计算两个日期时间之间的小时数,将其除以4然后对其进行舍入。想要做的事情似乎很奇怪,但是否应该这样做取决于你为什么这样做,我们现在没有背景。

答案 3 :(得分:0)

在拿到ccornet的答案之后,你可以用一个精美的四个班轮来做这件事:

var elapsedTime = DateTime.Now - DateTime.Today;
var quarterlyMinutes = (Math.Round(elapsedTime.TotalMinutes / 15) / 4) * 60;
var quartelySpan = new TimeSpan(0, (int)quarterlyMinutes, 0);
var output = quartelySpan.ToString();

通过此解决方案,您将获得最接近的季度小时数。这意味着在11:23,这将在11:30和11:22之间向下舍入到11:15。

如果您希望仅按季度填充,则可以使用:

var quarterlyMinutes = (Math.Floor(elapsedTime.TotalMinutes / 15) / 4) * 60;

如果TimeSpan已经显示11:29分钟,这将导致11:15。

最后但并非最不重要的是,每次开始每季度工作时间

var quarterlyMinutes = (Math.Ceiling(elapsedTime.TotalMinutes / 15) / 4) * 60;

你会得到每个开始的季度。因此,对于11:01,这将导致11:15。