如何将Vb.net中的日期时间舍入到最接近的5分钟
我正在写一些数据分析软件,我想提高我的原始数据的时基。我的原始数据的时间步长约为20分钟。我希望以每小时、每天和每月5分钟的时间步长将数据扩展到几个数据库表中。我计划从原始数据中运行每一个,以保持准确性 我目前面临的问题是获取一个初始值,并找到我想要的最接近的“圆形”时间点,作为我的起点。例如,我将以13/03/12 00:01:36点作为起点,我希望代码找到13/03/12 00:00:00作为最近的时间点,以便从那里开始计算。对于每一个时间点,我想在每一边走一半的时间步。因此,12/03/12 23:57:30到13/03/12 00:02:29将成为13/03/12 00:00:00 数据是使用SQL查询从Access获取的,日期和值存储在两个并排的数组中。下面是到目前为止我的代码。它将把值四舍五入到接下来的5分钟,而不是向上或向下到最近的5毫秒如何将Vb.net中的日期时间舍入到最接近的5分钟,.net,vb.net,visual-studio,datetime,visual-studio-2005,.net,Vb.net,Visual Studio,Datetime,Visual Studio 2005,我正在写一些数据分析软件,我想提高我的原始数据的时基。我的原始数据的时间步长约为20分钟。我希望以每小时、每天和每月5分钟的时间步长将数据扩展到几个数据库表中。我计划从原始数据中运行每一个,以保持准确性 我目前面临的问题是获取一个初始值,并找到我想要的最接近的“圆形”时间点,作为我的起点。例如,我将以13/03/12 00:01:36点作为起点,我希望代码找到13/03/12 00:00:00作为最近的时间点,以便从那里开始计算。对于每一个时间点,我想在每一边走一半的时间步。因此,12/03/1
Private Sub RateStateScale(ByVal Parameter As Integer, ByVal Timebase As String)
Dim NewDate(0)
Dim NewData(0)
Dim RecordCounter
Dim MinValue As Date = ScaleDate(0)
Dim startpoint As String
For RecordCounter = 0 To ScaleDate.GetLength(0)
If MinValue > ScaleDate(RecordCounter) Then
MinValue = ScaleDate(RecordCounter)
End If
Next
Do Until MinValue.Minute Mod 5 = 0
MinValue = MinValue.AddMinutes(1)
Loop
End Sub
感谢您的帮助一种可能是:
var日期=新的日期时间(2012,03,12,23,57,30);
var fullFiveMinutes=日期。分钟/5;
//结果将是我们的日期四舍五入到之前的整整五分钟
var结果=新的日期时间(date.Year,date.Month,date.Day
日期。小时,整整五分钟*5,0);
//如果我们在日期变量中加上2.5分钟,结果表示
//我们还需要整整五分钟的时间。
如果(date.AddSeconds(2.5*60).Minute/5!=fullFiveMinutes)
结果=结果。添加分钟数(5);
这是C#代码,我相信你能翻译出来。让我们试试VB的“四舍五入”功能:
' just some date, should be a parameter to your function
Dim mydatetime = new DateTime(2012,3,12,23,57,30)
' split into date + time parts
Dim datepart = mydatetime.Date
Dim timepart = mydatetime.TimeOfDay
' round time to the nearest 5 minutes
timepart = TimeSpan.FromMinutes(Math.Floor((timepart.TotalMinutes+2.5)/5.0) * 5.0)
' combine the parts
Dim newtime = datepart.Add(timepart)
' a function would return this value
你能做什么?(非常基本,但应该给出一个想法)
第一个数据点可能不在12/03/12 23:57:30,数据将来自几个不同的记录站点,在不同的时间启动和停止。起始点需要从数组中获取,因此循环将查找
min value
。代码中的注释还表示,四舍五入到前一个完整的五分钟
,我希望代码四舍五入到最近的五分钟。@pezzz:请尝试一下。如果您只看到第一条注释,那么您没有阅读整个代码<代码>12/03/12 23:57:30将四舍五入为12/03/13 00:00:00
。不需要使用数组中的任何内容,因为您只需要四舍五入到最接近的五分钟。@Blam,当我第一次查看代码时,它与现在的情况不同,共有3行,以var开头,一条注释,然后是if语句。他在编辑中修改了它。@pezzz:错了。我只是改变了语法的颜色。你可以在报纸上看到,怎么样
Dim tValue As Date = ScaleDate(0)
'find the next highest 5 minute mark
For RecordCounter = 0 To ScaleDate.GetLength(0)
If tValue > ScaleDate(RecordCounter) Then
tValue = ScaleDate(RecordCounter)
End If
Next
Do Until tValue.Minute Mod 5 = 0
tValue = tValue.AddMinutes(1)
Loop
'compare the original value to the next highest. If more than 2.5 minutes, then subtract 5 minutes
If DateDiff(DateInterval.Second, tValue, MinValue) > 150 Then
MinValue = tValue.AddMinutes(-5)
Else
MinValue = tValue
End If