在c中转换int的时间

时间:2009-10-22 20:56:51

标签: c time

如果我在c中有一个表示日期的整数,我该如何打印出实际的mm / dd / year?

64位值,表示自1601年1月1日(UTC)以来100纳秒间隔的数量

1183042181

如果我在32位系统上,并且必须从文件读取整数?

C而不是C ++

4 个答案:

答案 0 :(得分:3)

C的库包含strftime函数,它将使用指定的格式字符串格式化struct tm。当然,从那里你可以打印出来。所以:

  • 将您的FILETIME转换为自1601年以来的秒数除以10,000,000。
  • 通过减去1601-01-01和1970-01-01之间的秒数来转换为标准UNIX时间戳。
  • 使用localtime()将其转换为struct tm。
  • 使用strftime()获取格式化字符串。
  • 打印出来。
  • 编写一个功能来完成所有这些操作,这样您就不必再这样做了。

答案 1 :(得分:2)

阅读MSDN部分:

  

<强>说明

     

将FILETIME结构转换为   时间很容易显示到   用户,使用FileTimeToSystemTime   功能

答案 2 :(得分:1)

将时间加入struct tm并致电strftime()

全部在<time.h>声明。

答案 3 :(得分:0)

您可以使用此例程将64位值转换为time_t结构

time_t FileTimeToUnixTime(FILETIME& ft)
{
    ULARGE_INTEGER li;
    assert(sizeof(ULARGE_INTEGER) == sizeof(FILETIME));
    memcpy(&li, &ft, sizeof(FILETIME));
    li.QuadPart -= 116444736000000000;
    li.QuadPart /= 10000000;
    return (time_t)(li.LowPart);
} 

当然,只有当你的FILETIME真的在time_t范围内时,这才有效。我想你知道如何处理产生的time_t。

32位系统不会阻止您将64位读取为二进制值。如果您更喜欢scanf,可以使用“%llu”格式。