2009-12-23 103 views

回答

32

这工作在Ubuntu Linux:

struct timeval tv; 

gettimeofday(&tv, NULL); 

unsigned long long millisecondsSinceEpoch = 
    (unsigned long long)(tv.tv_sec) * 1000 + 
    (unsigned long long)(tv.tv_usec)/1000; 

printf("%llu\n", millisecondsSinceEpoch); 

在写这篇文章时,printf()的上面是给我1338850197035.的时间您可以在TimestampConvert.com网站,你可以做一个全面的检查输入该值以获取相当于人类可读的时间(尽管毫秒级精度)。

1

Unix time or Posix time以来的时间,因为您提到的时代。

bzabhi的答案是正确的:你只需乘以1000 Unix时间戳获得毫秒。

请注意,依靠Unix时间戳返回的所有毫秒值将是倍数(例如12345678000)。决议仍然只有1秒。

你不能得到分数部分

从帕维尔的评论是正确的也是。 Unix时间戳不考虑闰秒。这使得依靠转换为毫秒来更不明智。

+0

任何其他能够得到精确毫秒数的库,包括其小数部分????? – Siddiqui 2009-12-23 12:00:25

+0

Unix时间戳与我们可以走的基本一样。 Unix的设计者一定认为只有一秒钟的分辨率就足够了。然后,维持1ms分辨率的开销可能超过了早期的Unix系统。 – pavium 2009-12-23 12:04:16

6

这不是标准的C,但gettimeofday()存在于两者的SysV和BSD派生的系统,并且是在POSIX。它将返回的时间,因为在struct timeval时代:

struct timeval { 
    time_t  tv_sec;  /* seconds */ 
    suseconds_t tv_usec; /* microseconds */ 
}; 
9

如果你想毫秒的分辨率,可以在Posix的使用的gettimeofday()。对于Windows实现,请参阅gettimeofday function for windows

#include <sys/time.h> 

... 

struct timeval tp; 
gettimeofday(&tp); 
long int ms = tp.tv_sec * 1000 + tp.tv_usec/1000; 
+3

它应该可能是'gettimeofday(&tv,NULL)' – puk 2013-11-06 00:53:30

+1

答案中的链接已死亡。该域不存在。 – owacoder 2016-09-11 19:52:44

1
// the system time 
    SYSTEMTIME systemTime; 
    GetSystemTime(&systemTime); 

    // the current file time 
    FILETIME fileTime; 
    SystemTimeToFileTime(&systemTime, &fileTime); 

    // filetime in 100 nanosecond resolution 
    ULONGLONG fileTimeNano100; 
    fileTimeNano100 = (((ULONGLONG) fileTime.dwHighDateTime) << 32) + fileTime.dwLowDateTime; 

    //to milliseconds and unix windows epoche offset removed 
    ULONGLONG posixTime = fileTimeNano100/10000 - 11644473600000; 
    return posixTime; 
相关问题