将Unix时间转换为日期的最佳方法是什么?
是否有函数或算法?
答案 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
。您可以使用localtime
或gmtime
执行此操作,具体取决于您是要使用本地时区还是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;
}