1970年以来的秒转换为具体日期时间

2 篇文章 0 订阅

输入:0时区的标准秒数

输出:东8区的具体日期时间

struct TimeDetail
{
	unsigned short day;
	unsigned short hour;
	unsigned short minute;
	unsigned short second;
};

struct DateTimeDetail
{
	unsigned short year;
	unsigned short month;
	unsigned short day;
	unsigned short hour;
	unsigned short minute;
	unsigned short second;
};

//秒转换为天,时,分,秒
TimeDetail CommonFunction::getTimeDetailByInt(unsigned int time)
{
	TimeDetail detail = { 0, 0, 0, 0 };

	detail.day = (int)(time / oneDaySeconds);
	time -= detail.day * oneDaySeconds;

	detail.hour = (int)(time / oneHourSeconds);
	time -= detail.hour * oneHourSeconds;

	detail.minute = (int)(time / oneMinuteSeconds);
	detail.second = time - detail.minute * oneMinuteSeconds;

	return detail;
}

//秒转换为年,月,日,时,分,秒
DateTimeDetail CommonFunction::getCurrentSystemDateTime(unsigned int time)
{
	TimeDetail timeDetail = getTimeDetailByInt(time);
	DateTimeDetail	dateTimeDetail;
	dateTimeDetail.year = 1970;
	dateTimeDetail.month = 1;
	dateTimeDetail.day = 1;
	dateTimeDetail.hour = timeDetail.hour + 8;//时区导致
	dateTimeDetail.minute = timeDetail.minute;
	dateTimeDetail.second = timeDetail.second;

	int daysLeft = timeDetail.day;
	int daysOfYear;
	while (daysLeft > 0)
	{
		if ((((dateTimeDetail.year % 4) == 0) && (dateTimeDetail.year % 100) != 0) || (dateTimeDetail.year % 400 == 0))
			daysOfYear = 366;
		else
			daysOfYear = 365;

		if (daysLeft < daysOfYear)
		{
			int daysOfMonth;
			while (daysLeft > 0)
			{
				switch (dateTimeDetail.month)
				{
				case 1:case 3:case 5:case 7:case 8:case 10:case 12:
					daysOfMonth = 31;
					break;
				case 4:case 6:case 9:case 11:
					daysOfMonth = 30;
					break;
				case 2:
					daysOfMonth = (daysOfYear == 365) ? 28 : 29;
				default:
					break;
				}

				if (daysLeft < daysOfMonth)
				{
					dateTimeDetail.day = daysLeft + 1;
					daysLeft = 0;
				}
				else
				{
					daysLeft -= daysOfMonth;
					dateTimeDetail.month++;
				}
			}
		}
		else
		{
			daysLeft -= daysOfYear;
			dateTimeDetail.year++;
		}
	}

	return	dateTimeDetail;
}


  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值