给定一个历史日期,如何算出已过去多少年月日时分秒?

weiwuyuan 2014-06-05 06:19:43
给你2012年8月23日 14时32分10秒
要求算出,距离今日多少年,多少月,多少天,时,分,和秒?
...全文
266 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lx624909677 2014-06-06
  • 打赏
  • 举报
回复
直接把你的那个指定的时间换成秒。。把当前也换换成秒。。减一下然后在转换回来。。或者直接用time_t结构体来做。。
weiwuyuan 2014-06-05
  • 打赏
  • 举报
回复
引用 3 楼 taodm 的回复:
听说过闰秒么?
如果要实现闰秒可能会写更多代码,另外,恐怕我不用那么精确
taodm 2014-06-05
  • 打赏
  • 举报
回复
听说过闰秒么?
weiwuyuan 2014-06-05
  • 打赏
  • 举报
回复

// 获取已过去的时间日期
void Date_GetElapsedDate(tm oldDate, tm* pOutDate)	// 注意:oldDate为真实日期
{
	memset(pOutDate, 0, sizeof(tm));
	oldDate.tm_year -= 1900;
	oldDate.tm_mon -= 1;

	tm curDate;
	time_t curTime = time(NULL);
	localtime_s(&curDate, &curTime);

	UINT time_diff = UINT(difftime(mktime(&curDate), mktime(&oldDate)));

	pOutDate->tm_sec = time_diff % 60;	time_diff /= 60;
	pOutDate->tm_min = time_diff % 60;	time_diff /= 60;
	pOutDate->tm_hour = time_diff % 24;	time_diff /= 24;

	int month_days[13] = { 0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	// 从当前日期往前减天数,直到天数减完
	for (int y = curDate.tm_year + 1900, m = curDate.tm_mon + 1, d = time_diff; ; y--, pOutDate->tm_year++)
	{
		month_days[2] = ((y%4 == 0 && y%100 != 0) || y%400 == 0)? 29 : 28;

		for ( ; m>0; m--, pOutDate->tm_mon++)
		{
			d -= month_days[m];
			if (d < 0)
				break;

			pOutDate->tm_mday = d;
		}

		m = 12;

		if (d < 0)
			break;
	}
}
自己写的代码, 看看,谁还能更精简的代码实现出来?
ctgucool 2014-06-05
  • 打赏
  • 举报
回复
先得到总秒数和闰年数,大概写一下,可能不对 秒=总秒%60 分=(总秒%3600)/60 取整 时=(总秒/(3600*24))/3600 年=(总秒-闰年数*24*3600)/(365*24*3600) 月=先取 ((总秒-闰年数*24*3600)%(365*24*3600))/(24*3600) 取整后是剩余的天数,根据天数可以算多少月 日=将上面取的天数和月数进行运算,得到除去月后天数

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧