C语言实现时间戳转日期的算法语言实现时间戳转日期的算法(推荐推荐)
下面小编就为大家带来一篇C语言实现时间戳转日期的算法(推荐)。小编觉得挺不错的,现在就分享给大家,也
给大家做个参考。一起跟随小编过来看看吧
1、算法、算法
时间是有周期规律的,4年一个周期(平年、平年、平年、闰年)共计1461天。Windows上C库函数time(NULL)返回的是从
1970年1月1日以来的毫秒数,我们最后算出来的年数一定要加上这个基数1970。总的天数除以1461就可以知道经历了多少个
周期;总的天数对1461取余数就可以知道剩余的不足一个周期的天数,对这个余数进行判断也就可以得到月份和日了。
当然了,C语言库函数:localtime就可以获得一个时间戳对应的具体日期了,这里 主要说的是实现的一种算法。
2、、C语言代码实现语言代码实现
int nTime = time(NULL);//得到当前系统时间
int nDays = nTime/DAYMS + 1;//time函数获取的是从1970年以来的毫秒数,因此需要先得到天数
int nYear4 = nDays/FOURYEARS;//得到从1970年以来的周期(4年)的次数
int nRemain = nDays%FOURYEARS;//得到不足一个周期的天数
int nDesYear = 1970 + nYear4*4;
int nDesMonth = 0, nDesDay = 0;
bool bLeapYear = false;
if ( nRemain<365 )//一个周期内,第一年
{//平年
}
else if ( nRemain<(365+365) )//一个周期内,第二年
{//平年
nDesYear += 1;
nRemain -= 365;
}
else if ( nRemain<(365+365+365) )//一个周期内,第三年
{//平年
nDesYear += 2;
nRemain -= (365+365);
}
else//一个周期内,第四年,这一年是闰年
{//润年
nDesYear += 3;
nRemain -= (365+365+365);
bLeapYear = true;
}
GetMonthAndDay(nRemain, nDesMonth, nDesDay, bLeapYear);
计算月份和日期的函数:
static const int MON1[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //平年
static const int MON2[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //闰年
static const int FOURYEARS = (366 + 365 +365 +365); //每个四年的总天数
static const int DAYMS = 24*3600; //每天的毫秒数
void GetMonthAndDay(int nDays, int& nMonth, int& nDay, bool IsLeapYear)
{
int *pMonths = IsLeapYear?MON2:MON1;
//循环减去12个月中每个月的天数,直到剩余天数小于等于0,就找到了对应的月份
for ( int i=0; i<12; ++i )
{
int nTemp = nDays - pMonths[i];
if ( nTemp<=0 )
{
nMonth = i+1;
if ( nTemp == 0 )//表示刚好是这个月的最后一天,那么天数就是这个月的总天数了
nDay = pMonths[i];
else
nDay = nDays;
break;
}
nDays = nTemp;
}
}
3、附上、附上C语言库函数的实现语言库函数的实现
<pre name="code" class="cpp">/***
*errno_t _gmtime32_s(ptm, timp) - convert *timp to a structure (UTC)
*
*Purpose:
评论0