The time function in time.h gives milliseconds since the epoch.
This is a simple way:
time_t seconds_since_midnight = time(NULL) % 86400;
To get approximate milliseconds since midnight, multiply seconds_since_midnight
by 1000.
If you need more resolution (consider whether you really do), you will have to use another function such as gettimeofday()
.
You use gettimeofday(2) which is defined in POSIX.1 and BSD.
It returns seconds and microseconds as defined in struct timeval from sys/time.h.
Take a look at gmtime() Converts directly to Coordinated Universal Time (UTC)...
You will find C
code examples for getting time and converting it to various formats here.
This is the precise way:
struct timeval tv;
int msec = -1;
if (gettimeofday(&tv, NULL) == 0)
{
msec = ((tv.tv_sec % 86400) * 1000 + tv.tv_usec / 1000);
}
That will store into msec
the number of milliseconds since midnight.
(Or -1 if there was an error getting the time.)
Although it's usually a bad idea to store time-values in an int
, I'm being a little cavalier and assuming int
is at least 32-bit, and can easily accommodate the range (-1) to 86,400,000.
But I don't know if it's worth all the effort.