在Windows系统下,使用C语言怎么获取精确的时间戳

Python012

在Windows系统下,使用C语言怎么获取精确的时间戳,第1张

//方案— 优点:仅使用C标准库;缺点:只能精确到秒级#include <time.h>

#include <stdio.h>

int main( void )

{

time_t t = time(0)

char tmp[64]

strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) )

puts( tmp )

return 0

}

size_t strftime(char *strDest, size_t maxsize, const char *format, const struct tm *timeptr)

根据格式字符串生成字符串。

struct tm *localtime(const time_t *timer)

取得当地时间,localtime获取的结果由结构tm返回

#include <stdio.h>

typedef long long int time64

/* 

将64位时间戳转化为时间数组 

*/  

void transformToDate(time64 timeStamp ,time64 **dateArry)

{  

    time64 low ,high ,mid ,t  

    time64 year ,month ,day ,hour ,minute ,second ,milliSecond  

    time64 daySum[] = {0 ,31 ,59 ,90 ,120 ,151 ,181 ,212 ,243 ,273 ,304 ,334 ,365}  

    time64 milOfDay = 24 * 3600 * 1000  

    time64 milOfHour = 3600 * 1000  

  

    /*防止超过9999-12-31 23:59:59:999*/  

    if(timeStamp > 315537897599999) {  

        timeStamp = 315537897599999  

    }  

  

    low = 1  

    high = 9999  

  

    while(low <= high)  

    {  

        mid = (low+high)>>1  

        t = ((mid-1) * 365 + (mid-1)/4 - (mid-1)/100 + (mid-1)/400) * milOfDay  

  

        if(t == timeStamp)  

        {  

            low = mid + 1  

            break  

        }  

        else if(t < timeStamp)  

            low = mid + 1  

        else  

            high = mid - 1  

    }  

    year = low-1  

    timeStamp -= ((year-1) * 365 + (year-1)/4 - (year-1)/100 + (year-1)/400) * milOfDay  

  

    int isLeapYear = ((year&3) == 0 && year%100!=0) || year%400 == 0  

  

    for(month = 1 (daySum[month] + ((isLeapYear && month > 1) ? 1 : 0)) * milOfDay <= timeStamp && month < 13 month ++) {  

        if(isLeapYear && month > 1)  

            ++daySum[month]  

    }  

    timeStamp -= daySum[month-1] * milOfDay  

  

    day = timeStamp / milOfDay  

    timeStamp -= day * milOfDay  

  

    hour = timeStamp / milOfHour  

    timeStamp -= hour * milOfHour  

  

    minute = timeStamp / 60000  

    timeStamp -= minute * 60000  

  

    second = timeStamp / 1000  

    milliSecond = timeStamp % 1000  

  

    *dateArry[0] = year  

    *dateArry[1] = month  

    *dateArry[2] = day  

    *dateArry[3] = hour  

    *dateArry[4] = minute  

    *dateArry[5] = second  

    *dateArry[6] = milliSecond  

}

//将64位时间戳转化为时间字符串

void transformToDateString(time64 timeStamp ,char *dateString)  

{  

    time64 year ,month ,day ,hour ,minute ,second ,milliSecond  

    time64 *intp[] = {&year ,&month ,&day ,&hour ,&minute ,&second ,&milliSecond }  

  

    transformToDate(timeStamp ,intp)  

  

    sprintf(dateString ,"%.4I64d-%.2I64d-%.2I64d %.2I64d:%.2I64d:%.2I64d:%.3I64d" ,  

        year ,month ,day+1 ,hour ,minute ,second ,milliSecond )  

}

int main()

{

time64 time

char date[256]

scanf("%lld",&time)

transformToDateString(time,date)

printf("date= %s\n",date)

return 0

}

示例运行结果:

63510000999140

date= 2013-07-21 10:56:39:140