Unix时间可读日期

时间:2012-11-23 23:31:29

标签: c++ date time unix-timestamp

将Unix时间转换为日期的最佳方法是什么?

是否有函数或算法?

3 个答案:

答案 0 :(得分:14)

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

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

作为本地时间的手册

  

返回值指向静态分配   可能被后续调用任何一个的覆盖的struct   日期和时间功能。

这有些人称之为数据竞赛。当两个或多个线程同时调用localtime时会发生这种情况。

为了防止这种情况,有人建议使用localtime_s,这是Microsoft唯一的功能。在POSIX系统上,您应该使用localtime_r代替

  

localtime_r()函数也是这样,   但是将数据存储在用户提供的结构中。

用法看起来像

time_t t = time(NULL);
struct tm res;
localtime_r(&t, &res);

答案 1 :(得分:2)

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

然后,您可以将struct tm格式化为strftime的字符串。例如,要获得2012-11-24之类的日期,请使用格式"%Y-%m-%d"

答案 2 :(得分:0)

另见http://ingar.satgnu.net/devenv/mingw32/gtk.html

此函数应从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;

}