473,658 Members | 2,628 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

How to add milliseconds to Now()?

547 Contributor
I need to add milliseconds to this finishtime of race

Expand|Select|Wrap|Line Numbers
  1. [Forms]![RaceSetupttF]![RaceTimingTTSF1]![RaceFinishTime] = Format(Now(), "General Date")
Start code for race also in milliseconds
Expand|Select|Wrap|Line Numbers
  1. [Forms]![RaceSetupttF]![Rt_StartTTSF]![startTT] = Format(Now(), "General Date")
I will then subtract it from the start time and get a result in milliseconds
Expand|Select|Wrap|Line Numbers
  1. RacingTime: Format([Racefinishtime]-[startTT],"hh:nn:ss")
Any suggestions on how this can be accomplished?
Jan 27 '11 #1
16 38374
TheSmileyCoder
2,322 Recognized Expert Moderator Top Contributor
Access Now() will only record as accurate as down to 1 second. So you can't use that. I also dont think (but dont know for sure) that you can store time in date/time field more accurately then down to the second. And you will still need to custom format it when you want to display it.

Now this is something I use to time my procedures to see how long they take, and how different approaches can shorten the run time.

Place this code in a CLASS module called StopWatch. (I did not write the original code, though I did modify it somewhat)
Expand|Select|Wrap|Line Numbers
  1. Private mlngStart As Long
  2. Private Declare Function GetTickCount Lib "kernel32" () As Long
  3.  
  4. Public Sub StartTimer()
  5.     mlngStart = GetTickCount
  6. End Sub
  7.  
  8. Public Function EndTimer() As String
  9.     Dim EndTime As Long
  10.     EndTime = (GetTickCount - mlngStart)
  11.     Dim s As Integer
  12.     s = EndTime / 1000
  13.     Dim ms As Integer
  14.     ms = EndTime Mod 1000
  15.     If s > 1 Then
  16.         EndTimer = s & "s, " & ms & "ms"
  17.     Else
  18.         EndTimer = ms & "ms"
  19.     End If
  20. End Function
When I use this timer it looks like this:
Expand|Select|Wrap|Line Numbers
  1. Private sub MyFunction()
  2.   'Start stopwatch
  3.   Dim mySW as stopwatch
  4.   mySW.StartTimer
  5.  
  6.   'Rest of my code goes here
  7.  
  8.   'Reached the end of code, printout how long it took to run it
  9.   Debug.Print "MyFunction ran in:" & mySW.EndTimer
  10. End Sub
Jan 27 '11 #2
ADezii
8,834 Recognized Expert Expert
http://bytes.com/topic/access/insigh...lliseconds-vba
Jan 28 '11 #3
neelsfer
547 Contributor
Thx for the advice so far. I am struggling with modules and to link to them from a button.
i am attaching part of the application ( deleted parts of it to make it smaller)
How do i add these milliseconds functions to the "Start Rider" and "Add time" buttons? Both buttons use Now() currently. Will it be different to deduct the finish and start times now? Please help.
Attached Files
File Type: zip Racetiming v5.1 -milisec 2003.zip (633.6 KB, 593 views)
Jan 28 '11 #4
ADezii
8,834 Recognized Expert Expert
The way that I see things is that what you are requesting would be difficult to implement, for the reasons given by TheSmileyOne. You can display the Current Time as 16:48:01:0913, but since this is not a true Date Value, you would not be able to perform mathematical calculations on in without the addition of some innovative Code.
Jan 29 '11 #5
neelsfer
547 Contributor
The only calculation i am going to have for this milliseconds on one of my forms, is finishtime minus starttime (with mulliseconds), No additions required etc. Is that possible?
Its for a specific type of racing called timetrial where they race individually from point A to B and back to A. You may have 2 persons with the same racingtime and that's where the milliseconds come in
Jan 30 '11 #6
Stewart Ross
2,545 Recognized Expert Moderator Specialist
I've adapted the code originally supplied by Mary to return the system time in milliseconds as a long int value. This can be used as in the test function to assign times then subtract them afterwards to get the true difference in milliseconds.

I hope this helps.

Expand|Select|Wrap|Line Numbers
  1. Option Compare Database
  2. Option Explicit
  3.  
  4. Private Type SYSTEMTIME
  5.   wYear As Integer
  6.   wMonth As Integer
  7.   wDayOfWeek As Integer
  8.   wDay As Integer
  9.   wHour As Integer
  10.   wMinute As Integer
  11.   wSecond As Integer
  12.   wMilliseconds As Integer
  13. End Type
  14.  
  15.  
  16. Private Declare Sub GetSystemTime Lib "kernel32" _
  17. (lpSystemTime As SYSTEMTIME)
  18.  
  19. Public Function TimeToMillisecond() As Long
  20.     Dim tSystem As SYSTEMTIME
  21.     Dim sRet As Long
  22.     On Error Resume Next
  23.     GetSystemTime tSystem
  24.     With tSystem
  25.         sRet = (CLng(.wHour) * 60 * 60 * 1000) + (CLng(.wMinute) * 60 * 1000) + CLng(.wSecond) * 1000 + .wMilliseconds
  26.     End With
  27.     TimeToMillisecond = sRet
  28. End Function
  29.  
  30.  
  31.  
  32. Public Function TimeTest()
  33.     Dim lngV1 As Long, lngV2 As Long, lngCounter As Long
  34.     lngV1 = TimeToMillisecond
  35.     For lngCounter = 1 To 1000000000
  36.     Next
  37.     lngV2 = TimeToMillisecond
  38.     Debug.Print "First Time: " & lngV1, "Second Time: " & lngV2, "Diff (ms): " & lngV2 - lngV1
  39. End Function
  40.  
Example of test run:

? TimeTest
First Time: 37081308 Second Time: 37088349 Diff (ms): 7041

-Stewart
Jan 30 '11 #7
Stewart Ross
2,545 Recognized Expert Moderator Specialist
Oops. I forgot to provide a way to show the system time in ms in its normal form:

Expand|Select|Wrap|Line Numbers
  1. Public Function ShowSysTime(ByVal Tms As Long) As String
  2.     Const MsInHour = 3600000
  3.     Const MsinMin = 60000
  4.     Const MsInSec = 1000
  5.     Dim lngHrs As Long
  6.     Dim lngMins As Long
  7.     Dim lngSecs As Long
  8.     Dim lngMs As Long
  9.     lngHrs = Tms \ MsInHour
  10.     Tms = Tms - (lngHrs * MsInHour)
  11.     lngMins = Tms \ MsinMin
  12.     Tms = Tms - (lngMins * MsinMin)
  13.     lngSecs = Tms \ MsInSec
  14.     Tms = Tms - (lngSecs * MsInSec)
  15.     lngMs = Tms
  16.     ShowSysTime = Format(lngHrs, "00") & ":" & Format(lngMins, "00") & ":" & Format(lngSecs, "00") & ":" & Format(lngMs, "000")
  17. End Function
Test run:
? ShowSysTime(Tim eToMillisecond)
10:38:19:478

-Stewart

PS Please note that neither Mary's original code nor my adapted versions above handle transitions from one day to the next where the times extend past midnight (e.g. for 23:30:00:567 to 00:01:30:123). The SystemTime type does contain a .wDay component that could be used in extending the code provided for that purpose if necessary.
Jan 30 '11 #8
neelsfer
547 Contributor
thx for the trouble. How do i incorporate it into a form and link it to a button. I am novice but learning fast.
Jan 30 '11 #9
ADezii
8,834 Recognized Expert Expert
The following Code takes a radically different approach, and incorporates all logic in a single Function Procedure. It accepts 2, precisely formatted String Arguments representing Time Values in the Format of:
Expand|Select|Wrap|Line Numbers
  1. hh:nn:ss:llll
  2. h = Hours
  3. n = Minutes
  4. s = seconds
  5. l = Milliseconds
  6.  
  7. Examples:
  8. 12:43:13:0854
  9. 23:02:58:0012
  10.  
The Function will then return the Time Difference in Milliseconds. For the sake of simplicity and brevity, it performs minimal Validations on the Inputs and does not take into consideration the Midnight barrier. I don't really think this would apply to races anyway. I have not spent that much time on the Logic, so it may need a little work.

P.S. - I'll post the Code, but feel free to Download the Attachment, play with it, and see what you think. Any questions, feel free to ask.
Expand|Select|Wrap|Line Numbers
  1. Public Function fCalcTimeDifference(strStart As String, strFinish As String) As Long
  2. Dim dteStart As Date
  3. Dim dteFinish As Date
  4. Dim lngMilliDiff As Long
  5. Dim lngStartMilliSecs As Long
  6. Dim lngFinishMilliSecs As Long
  7.  
  8. 'Extract Real Time Values from strStart minus Milliseconds
  9. dteStart = TimeValue(Left$(strStart, 8))
  10. dteFinish = TimeValue(Left$(strFinish, 8))
  11. lngStartMilliSecs = Val(Right$(strStart, 4))
  12. lngFinishMilliSecs = Val(Right$(strFinish, 4))
  13.  
  14. 'If the Base Times are equal, and the only difference is in Milliseconds, as in:
  15. '11:30:10:0099 - 11:30:10:0345
  16. If (dteStart = dteFinish) And (lngFinishMilliSecs > lngStartMilliSecs) Then
  17.   fCalcTimeDifference = (lngFinishMilliSecs - lngStartMilliSecs)
  18.     'Debug.Print dteStart & " ==> " & dteFinish
  19. Else        'Start Time <> Finish Time
  20.   'Check the Millisecond Component of the time to see if Finish Millisecond >
  21.   'Start Millisecond, if this is not true, then we need to 'borrow' 1 second
  22.   '(1,000 Millisecond) from the Finish
  23.   If lngFinishMilliSecs > lngStartMilliSecs Then      'We're good
  24.     'Convert Time Differential in Milliseconds
  25.     lngMilliDiff = (DateDiff("s", dteStart, dteFinish) * 1000) + _
  26.                    (lngFinishMilliSecs - lngStartMilliSecs)
  27.       fCalcTimeDifference = lngMilliDiff
  28.   Else
  29.     'Need to 'borrow' 1 second from Finish Time and add it to Milliseconds Component
  30.     dteFinish = DateAdd("s", -1, dteFinish)       'Borrowed a second, will add to
  31.                                                   'Millisecond Component
  32.       lngMilliDiff = (DateDiff("s", dteStart, dteFinish) * 1000) + _
  33.                      ((lngFinishMilliSecs + 1000) - lngStartMilliSecs)
  34.       fCalcTimeDifference = lngMilliDiff
  35.   End If
  36. End If
  37. End Function
Attached Files
File Type: zip Milliseconds.zip (17.4 KB, 559 views)
Jan 30 '11 #10

Sign in to post your reply or Sign up for a free account.

Similar topics

6
1728
by: Richard Visser | last post by:
Hi, i've found this DateRangeSelector : http://www.petrafex.com/view/pgID/21/db/pages/date_range_selector_date_manip ulation__dates_.html . This works fine but i need it to send the dates as : yyyy-mm-dd or dd-mm-yyyy instead of the milliseconds it using now. I also want to get rid of the 'show calender' pop-ups, i just need the Date Range Selector dropdowns. There is a demo and a download. I'm a newbie to javascript, so can someone...
9
7080
by: gregg | last post by:
Hi, I have to record the execution time of a program, but in milliseconds (the target language of the project initially was Pascal, but I talked the boss into letting me code it in C). So now, time.h gives time_t time() all right, but it returns it in milliseconds since the Epoch. Do you know of a way I could grab time in milliseconds (while keeping to
2
2635
by: Daniel | last post by:
how to get the number of milliseconds between two System.DateTime objects
9
7266
by: HL | last post by:
I am using VS 2005 Beta - C# Problem: The Timer fires a few milliseconds before the actual Due-Time Let's say a timer is created in the following manner: System.Threading.Timer m_timer = null; Let's declare a constant Int32 m_TimePeriod = 10000;
21
4373
by: Willie jan | last post by:
place this behind a button that fills a listbox. as you will see the time is now and then 0 or filled in???????????? by hitting the button. is there a way to determine the real elapsed time? thanks, Willie Dim T As Double
13
10576
by: Sharon | last post by:
I need to test a performance of some code of mine. I tried using the Environment.TickCount but its resolution is too low (from the MSDN remarks: The resolution of the TickCount property cannot be less than 500 milliseconds.), I also tried the DateTime and it also gives me minimum resolution of 500 milliseconds. But I need to measure much less the 500 milliseconds, I need it to be several milliseconds. How can I do that? --------
6
30017
by: Manikandan | last post by:
Hi, I need to insert the datetime with milliseconds value into a datarow. My code as below DataTable testDataTable=new DataTable(); testDataTable.Columns.Add("updatedDateTime", typeof(DateTime)); DataRow testDateRow=surveyUpdatedDateDataTable.NewRow();
24
5252
by: Joe, G.I. | last post by:
Hi all, I'm trying to generate about 50 numbers as milliseconds between 0 and 4 seconds and it's driving me crazy. Can anyone help out on how to do this? Any help much appreciated.
1
3608
by: ndedhia1 | last post by:
I was reading in a log file like this that had no milliseconds: QuoteBlockTiming exceeded 1 ms: 1 --- Thu Dec 10 02:01:40 CST 2009 170.137.15.155 Class key = 601650761 block size QuoteBlockTiming exceeded 1 ms: 1 --- Thu Dec 10 02:01:40 CST 2009 170.137.15.155 Class key = 606887631 block size QuoteBlockTiming exceeded 1 ms: 1 --- Thu Dec 10 02:01:40 CST 2009 170.137.15.155 Class key = 154517966 block size QuoteBlockTiming exceeded 1 ms: 1...
0
8427
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
8330
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
8850
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
8746
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
8523
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
8626
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
1
6178
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
4175
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
2
1975
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.