如何从1970年1月1日开始用c语言获得UTCTime(以毫秒为单位)

有没有办法在c语言中使用time.h从1970年获得毫秒及其分数部分?

这适用于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网站上进行健全性检查,您可以在其中输入值以获取等效的人类可读时间(尽管没有毫秒精度) 。

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

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

它不是标准C,但gettimeofday()存在于SysV和BSD派生系统中,并且位于POSIX中。 它在struct timeval返回自纪元以来的时间:

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

对于Unix和Linux,您可以使用gettimeofday 。

对于Win32,您可以使用GetSystemTimeAsFileTime ,然后将其转换为time_t +毫秒 。

  // 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; 

Unix时间或Posix时间是自你提到的纪元以来的秒数

bzabhi的回答是正确的:你只需将Unix时间戳乘以1000就可以得到毫秒。

请注意,依赖于Unix时间戳返回的所有毫秒值都将是1000的倍数 (如12345678000)。 分辨率仍然只有1秒。

你不能得到分数部分

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