如何在Vb.net中将DateTime舍入到最近的5分钟

Pez*_*zzz 3 .net vb.net datetime visual-studio-2005 visual-studio

我正在编写一些数据分析软件,我想提高原始数据的时基.我的原始数据的时间步长为~2分钟.我想将数据扩展到几个数据库表,时间步长为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分钟.

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
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

Han*_*ing 8

让我们尝试一些VB,用于"舍入到最接近的5分钟"功能:

' 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
Run Code Online (Sandbox Code Playgroud)