我做了一个程序是半点上传数据的那种,在考虑断电的情况下出现的问题或没有到半点时就退出了的情况。我把数据存入了数据库中。当从数据库中取出来的时间没有超过半小时那么用从数据库中取出的值进行累加。如何去判断存入的时间与现在的时间相对比不没有超过半小时了。如:2008-03-29 11:15:47  值:78现在是:2008-03-29 11:23:11 没有超过半点那么用78进行累加。如何判断??还有一个小时的如何做判断?关键在于如何判断之前的一个时间和现在的时间是否在同一个半小时内或同一个小时内。上面的那两个时间就是在同一个半小时内,如果是下面一种情况就不用考虑了;
如:2008-03-29 11:15:47  值:78
现在是:2008-03-29 11:45:47 这两个时间就在不在同一个小时内了。一小进的也如上面说的差不多。
请大家帮忙看看。如有程序代码最好,没有算法也行。
这是一个红外计数器计数管理软件。半点保存整点保存都搞定了。有人想要半点保存或整点保存的代码我可以给你们。

解决方案 »

  1.   

    if (Hour(Now)*60++ Minute(Now) _ 
       -(Hour(TimeValue("11:23:11")) * 60 + Minute(TimeValue("11:23:11")))>600
    then  
      超过半点
    end if
      

  2.   

    我不明白你的设计方案,但请考虑使用DATEADD和DATEDIFF函数,为什么要将日期算成一个78、47的整型值?
      

  3.   

    Dim intDiff As Long
    Dim date1 As Date, date2 As Date '这两个时间由你代吧,但应该使date2>date1,否则DateDiff("n", date1, date2)会小于0
    date1 = CDate("3/30/2008 17:22:00 AM")
    date2 = Now
    intDiff = DateDiff("n", date1, date2)If intDiff <= 30 And Minute(date2) <= 30 Then
        MsgBox intDiff & "分钟. 在同一半小时内,并且未过半点"
    ElseIf intDiff <= 59 And Minute(date2) <= 30 Then
        MsgBox intDiff & "分钟. 在同一小时内,并且未过半点"
    ElseIf Minute(Now) > 30 Then
        MsgBox intDiff & "分钟. 已过半点"
    Else
        MsgBox intDiff & "分钟. 不在同一小时或半小时内"
    End If
      

  4.   

    搞定代码如下
    Dim ServerTimes As String'数据库中最后存入数据库中的最后一条记录的时间
     Case 1 '半小时保存一次
                      If (Mid(ServerTimes, 15, 2) = "00" And Right(ServerTimes, 2) = "00") Or (Mid(ServerTimes, 15, 2) = "30" And Right(ServerTimes, 2) = "00") Then '判断是否是半点保存的数据
                      Else
                          If (Mid(Now, 1, 10) = Mid(ServerTimes, 1, 10) And Mid(ServerTimes, 12, 2) = Mid(Now, 12, 2) And Mid(ServerTimes, 15, 2) < 30 And Mid(Now, 15, 2) < 30) Or (Mid(Now, 1, 10) = Mid(ServerTimes, 1, 10) And Mid(ServerTimes, 12, 2) = Mid(ServerTimes, 12, 2) And Mid(ServerTimes, 15, 2) > 30 And Mid(Now, 15, 2) And Right(ServerTimes, 2) < 59 And Mid(Now, 12, 2) > 30 And Mid(Now, 12, 2) < 59 And Right(Now, 2)) Then ''判断是否是在同一个时间内(同一半小时内)
                            If CountNum > AdoDs.Fields("Sy_Values").Value Then
                            Else
                               CountNum = AdoDs.Fields("Sy_Values").Value
                               AdoQs.Open "Update Sys_t_Values Set Sy_Flag='0' Where Sy_no='" & MachineNO & "'AND Sy_Savetime=#" & EndSaveTime & "#", Cnn, adOpenKeyset, adLockPessimistic
                            End If
                         Else
                            AdoQs.Open "Update Sys_t_Values Set Sy_True='1' Where Sy_no='" & MachineNO & "'AND Sy_Savetime=#" & EndSaveTime & "#", Cnn, adOpenKeyset, adLockPessimistic
                            CountNum = "0000"
                         End If
                      End If
    Case 2 '一个小时保存一次
                      If Mid(ServerTimes, 15, 2) = "00" And Right(ServerTimes, 2) = "00" Then
                      Else
                         'If Mid(Now, 1, 10) = Mid(ServerTimes, 1, 10) And Mid(Now, 12, 2) = Mid(ServerTimes, 12, 2) Then '有问题
                         If (Mid(ServerTimes, 1, 10) = Mid(Now, 1, 10) And Mid(ServerTimes, 12, 2) = Mid(Now, 12, 2) And Mid(ServerTimes, 15, 2) < 59 And Mid(Now, 15, 2) < 59 And Right(ServerTimes, 2) < 59 And Right(Now, 2) < 59) Then
                             If CountNum > AdoDs.Fields("Sy_Values").Value Then
                             Else
                               CountNum = AdoDs.Fields("Sy_Values").Value
                               AdoQs.Open "Update Sys_t_Values Set Sy_Flag='0' Where Sy_no='" & MachineNO & "'AND Sy_Savetime=#" & EndSaveTime & "#", Cnn, adOpenKeyset, adLockPessimistic
                             End If
                         Else
                             AdoQs.Open "Update Sys_t_Values Set Sy_True='1' Where Sy_no='" & MachineNO & "'AND Sy_Savetime=#" & EndSaveTime & "#", Cnn, adOpenKeyset, adLockPessimistic
                         End If
                     End If
      

  5.   


    呵呵,你自已要求不就是这样吗?
    你的代码:
    If (Mid(Now, 1, 10) = Mid(ServerTimes, 1, 10)‘同一天中
     And Mid(ServerTimes, 12, 2) = Mid(Now, 12, 2)’同一时中
     And Mid(ServerTimes, 15, 2)  < 30 And Mid(Now, 15, 2)  < 30)‘最后保存和现在的分钟都小于30
     Or 
    (Mid(Now, 1, 10) = Mid(ServerTimes, 1, 10)‘同一天中
     And Mid(ServerTimes, 12, 2) = Mid(ServerTimes, 12, 2)’????有用吗,就该是And Mid(ServerTimes, 12, 2) = Mid(Now, 12, 2)吧
     And Mid(ServerTimes, 15, 2) > 30 And Mid(Now, 15, 2)‘最后保存和现在的分钟都大于30,Mid(Now, 15, 2)‘???
     And Right(ServerTimes, 2)  < 59 And Mid(Now, 12, 2) > 30 And Mid(Now, 12, 2)  < 59 And Right(Now, 2)) Then ''判断是否是在同一个时间内(同一半小时内)...与我的代码:Dim intDiff As Long
    Dim date1 As Date, date2 As Date '这两个时间由你代吧,但应该使date2>date1,否则DateDiff("n", date1, date2)会小于0
    date1 = CDate(ServerTimes)
    date2 = Now
    intDiff = DateDiff("n", date1, date2)If intDiff < 30 And Minute(date2) < 30 Then与这一句的效果有区别吗?
        MsgBox intDiff & "分钟. 在同一半小时内,并且未过半点"
    ElseIf intDiff < 59 And Minute(date2) < 30 Then
        MsgBox intDiff & "分钟. 在同一小时内,并且未过半点"
    ElseIf Minute(Now) >= 30 Then
        MsgBox intDiff & "分钟. 已过半点"
    Else
        MsgBox intDiff & "分钟. 不在同一小时或半小时内"
    End If