我试图了解如何使用LINQ按时间间隔对数据进行分组; 然后理想地聚合每个组.
查找具有明确日期范围的众多示例,我正在尝试按时段分组,例如5分钟,1小时,1天.
例如,我有一个用Date包装DateTime的类:
public class Sample
{
public DateTime timestamp;
public double value;
}
Run Code Online (Sandbox Code Playgroud)
这些观察结果包含在List集合中的一系列中:
List<Sample> series;
Run Code Online (Sandbox Code Playgroud)
因此,按小时分组和按平均值计算总值,我正在尝试执行以下操作:
var grouped = from s in series
group s by new TimeSpan(1, 0, 0) into g
select new { timestamp = g.Key, value = g.Average(s => s.value };
Run Code Online (Sandbox Code Playgroud)
这基本上是有缺陷的,因为它将TimeSpan本身分组.我无法理解如何在查询中使用TimeSpan(或表示间隔的任何数据类型).
我一直在寻找一个合适的舍入机制,但我找不到似乎正是我需要的东西.
我需要分别向上和向下舍入,我还需要考虑到已经四舍五入的情况.
我需要进行以下四舍五入
5:00 -> RoundDown() -> 5:00
5:04 -> RoundDown() -> 5:00
5:09 -> RoundDown() -> 5:00
5:10 -> RoundDown() -> 5:10
4:00 -> RoundUp() -> 4:00
4:50 -> RoundUp() -> 4:50
4:51 -> RoundUp() -> 5:00
4:56 -> RoundUp() -> 5:00
Run Code Online (Sandbox Code Playgroud)
基本上我需要将RoundUp()或RoundDown()显式地提交到最近的10分钟,但如果它已经是10分钟的倍数,它也应该保持时间不变.此外,我想截断它们对舍入过程没有影响的任何秒数
4:50:45 - > 4:50:00 - > RoundUp() - > 4:50
有没有人有任何方便的代码来实现这一目标.
我在某个地方找到了这个代码,但是它在5:00 - > RoundUp() - > 5:10之后发现,而不是保持完整,因为它已经是10的倍数而不需要舍入.我也不确定秒会影响它
public static DateTime RoundDateTime(this DateTime dt, int minutes, RoundingDirection direction)
{
TimeSpan t;
switch (direction)
{
case RoundingDirection.Up: …Run Code Online (Sandbox Code Playgroud) 我的代码中有一个属性,用户可以在HH:mm中输入一个时间跨度
10:32
10:44
15:45
Run Code Online (Sandbox Code Playgroud)
我想在我的房产到最近的15分钟,但我没有在这里的日期时间.我只需要使用Timespan
10:32 to 10:30
10:44 to 10:45
15:45 to 15:45
01:02 to 01:00
02:11 to 02:15
03:22 to 03:15
23:52 to 00:00
Run Code Online (Sandbox Code Playgroud)
尝试了所有这些解决方案,但它们涉及Datetime
如何将时间向上舍入到最接近的X分钟?
是否有一个简单的函数可以将日期时间向下舍入到最接近的30分钟,在C#中?
DotNet Roundoff日期时间持续15分钟
例如:
2011-08-11 16:59成为2011-08-11 16:30
是否有功能将日期时间整理到最后一个季度?
例...
08:03:00 becomes 08:00:00
08:14:00 becomes 08:00:00
08:15:00 stays 08:15:00
08:16:00 becomes 08:15:00
08:29:00 becomes 08:15:00
08:45:00 stays 08:45:00
08:55:00 becomes 08:45:00
09:01:00 becomes 09:00:00
Run Code Online (Sandbox Code Playgroud)
我写了下面的函数,但它返回下一季 ...
private DateTime RoundUpToPreviousQuarter(DateTime date, TimeSpan d)
{
return new DateTime(((date.Ticks + d.Ticks - 1) / d.Ticks) * d.Ticks);
}
// call the method
this.RoundUp(time, TimeSpan.FromMinutes(15));
Run Code Online (Sandbox Code Playgroud)
任何投入都赞赏.
我试图解决如果可以在LINQ to Objects语句中完成以下操作.
我有一个字典,键作为DateTime(键是多天的值)和一个double值.我有太多的数据要绘制在图表上,所以想要每5分钟的平均值.
样本输入
01/01/2012 23:53 5
01/01/2012 23:54 2
01/01/2012 23:55 1
01/01/2012 23:56 3
01/01/2012 23:57 4
01/01/2012 23:58 5
01/01/2012 23:59 6
02/01/2012 00:00 2
02/01/2012 00:01 4
02/01/2012 00:02 5
Run Code Online (Sandbox Code Playgroud)
预期产出
01/01/2012 23:55 3
02/01/2012 00:00 4.4
Run Code Online (Sandbox Code Playgroud) 我想将 DateTime 舍入到最接近的 30 分钟。DART 中是否提供舍入机制?
假设我有一个,PageHit具有以下属性: 和.List<PageHit>DateTime RequestTimeint PageResponseTime
最终我要做的是将每个RequestTime值四舍五入到最接近的30分钟增量(使用如何将时间向上舍入到最接近的X分钟?),将它们组合在一起,并获得该页面的PageResponseTime的总体平均值增量块(真实世界用户故事:跟踪每30分钟块的平均页面响应时间).
这是我已经得到的,但我的大脑不会立即告诉我如何有效地获得每个增量的平均值而没有一些粗略的循环.有没有办法在第1步中执行此操作?
// Step 1: round all request times up
pageHitList.ForEach(x => x.RequestTime = x.RequestTime.RoundUp(TimeSpan.FromMinutes(30));
// Step 2: Get the average of each increment block
?
Run Code Online (Sandbox Code Playgroud) 我需要在 C# 中生成自定义随机时间 - 例如,不是随机几分钟,而是仅随机间隔 15 分钟 - 不是获得 17:11,而是 17:15。我怎样才能生成这个?我是这个问题的新手。谢谢