11

将 UnixTime 转换为日期的最佳方法是什么?

是否有它的功能或算法?

4

3 回答 3

16

Unix 时间是自纪元 (1970-01-01) 以来的秒数。根据您的意思,您可以struct tm使用localtime将其转换为 a 或使用strftime将其转换为字符串。

time_t t = time(NULL);
struct tm *tm = localtime(&t);
char date[20];
strftime(date, sizeof(date), "%Y-%m-%d", tm);

作为本地时间的手册

返回值指向一个静态分配的结构,随后调用任何日期和时间函数可能会覆盖该结构。

这就是一些人所说的数据竞赛。当两个或多个线程localtime同时调用时会发生这种情况。

为了避免这种情况,一些人建议使用localtime_sMicrosoft 独有的功能。在 POSIX 系统上,您应该localtime_r改用

localtime_r() 函数的作用相同,但将数据存储在用户提供的结构中。

用法看起来像

time_t t = time(NULL);
struct tm res;
localtime_r(&t, &res);
于 2012-11-23T23:38:25.847 回答
2

我假设你有时间在time_t. 首先,您需要将其转换为struct tm. 您可以使用localtime或执行此操作gmtime,具体取决于您要使用本地时区还是 GMT。

然后,您可以将其格式化struct tm为带有strftime. 例如,要获得一个日期,就像2012-11-24您使用 format一样"%Y-%m-%d"

于 2012-11-23T23:44:15.820 回答
1

另请参阅将 Unix/Linux 时间转换为 Windows FILETIME

此函数应将 UnixTime 转换为 Windows SYSTEMTIME

SYSTEMTIME intChromeTimeToSysTime(long long int UnixTime)
{
    ULARGE_INTEGER uLarge;
    uLarge.QuadPart = UnixTime;
    FILETIME ftTime;
    ftTime.dwHighDateTime = uLarge.HighPart;
    ftTime.dwLowDateTime = uLarge.LowPart;
    SYSTEMTIME stTime;
    FileTimeToSystemTime(&ftTime, &stTime);
    return stTime;

}
于 2017-01-02T12:53:54.753 回答